php中

php中字符串数据类型有什么特点?它有哪些定义方法?

php中字符串数据类型有什么特点?

字符串是php编程语言中八种数据类型一种,也是编程中常用的一种数据类型,首先要明白字符和字节是一样的,一个字符串可以是一个字符,在实际编程的过程中一个字符串可以变的非常巨大,而这个字符串可以由多个字符组成,php中字符串的长度没有限定,一篇论文、一首诗、一首歌都可以定义成字符串,那么在php中用什么方法定义字符串?下面为大家介绍一下:

php字符串数据类型

php字符串可以使用单引号、双引号、定界符三种方法定义字符串但他们使用功能上有很大的区别:

1、单引号定义字符串方法

用一个单引号(‘’)把字符串包含在内就行,单引号包括的内容不能再出现单引号,如果有单引号出现就会出现错误。如果必须要出现单引号需要用转义符号(反斜杠),如果字符串内容中出现反斜杠需要加两个反斜杠进行转义,另外单引号字符串中出现变量不会被变量值替代。

php字符串运行

2、双引号定义字符串方法

用一个当引号(“”)把字符串包含在内就行,双引号字符串出现变量会被变量值代替,会自动解析双引号出现的变量,这一点是和单引号字符串最大的区别,如果不想双引号中变量执行的话可以用花括号把变量名括起来。

双引号定义字符串

3、定界符定义字符串方法

使用定界符(“<<<”)在<<<之后提供标识符开始,然后在字符串内容,最后是标识符结束,标识符结束必须行的第一列开始(可以理解必须在文档最左边顶头)后来除了分号不能再有其他的字符,(空格也不行)。定界符定义字符串方法通常用于大段的数据输出。

定界符定义字符串

以上内容是关于字符串三种定义方法简单介绍,大家有什么好的想法欢迎补充讨论。

展开
收起

关于PHP语言在内存中的分配(堆和栈的区别)

分享关于编程中的数据在内存里的存储方式,本文以PHP语言为例来分析计算机中各段存储区的区别,代码段、堆空间段、代码段、初始化静态常量段。

在PHP中共有8种数据类型,其中4中标量类型(字符串、布尔型、整型、浮点型)、2种复合类型(对象、数组)、2种特殊类型(资源、NULL)。他们在运行的时候都要加载到内存中去用,那么在内存里面它们是怎么表示的呢?

初始化静态常量段:通常是指用来存放程序中已初始化且不为0的全局变量如:静态变量和常量。

代码段:通常是指用来存放程序执行代码的一块内存区域,比如函数和方法。

栈空间段:是存储占用相同空间长度并且占用空间小的数据类型的地方,比如说整型1,10,100,1000,10000,100000 等等,在内存里面占用空间是等长的,都是64 位4 个字节。存储的都是局部变量,凡是定义在方法中的都是局部变量(方法外的是全局变量),变量有自己的作用域,一旦离开作用域,变量就会被释放。栈内存的更新速度很快,因为局部变量的生命周期都很短。所以在栈空间的数据都是可以通过代码手动进行释放。

栈内存段:数据长度不定长,而且占有空间很大的数据类型的数据。在堆内存是里是不可以直接存取的内存,堆内存存储的是数组和对象(其实数组就是对象)。凡是new建立的都是在堆中,堆中存放的都是实体(对象),实体用于封装数据,而且是封装多个(实体的多个属性),如果一个数据消失,这个实体也没有消失,还可以用,所以堆是不会随时释放的,但是栈不一样,栈里存放的都是单个变量,变量被释放了,那就没有了。堆里的实体虽然不会被释放,但是会被当成垃圾,最后通过垃圾回收机制去实现垃圾回收。对于我们的对象来数就是一种大的数据类型而且是占用空间不定长的类型,所以说对象是放在堆里面的,但对象名称是放在栈里面的,这样通过对象名称就可以使用对象。

$p1=newPerson();

对于这个条代码,$p1 是对象名称在栈内存里面new Person()是真正的对象是在堆内存 里面的,具体的请看下图:

从上图可以看出$p1=new Person();等号右边是真正的对象实例,在堆内存里面的实体, 上图一共有3 次new Person(),所以会在堆里面开辟3 个空间,产生3 个实例对象,每个对象之间都是相互独立的,使用自己的空间,在PHP 里面,只要有一个new 这个关键字出现就会 实例化出来一个对象,在堆里面开辟一块自己的空间。 每个在堆里面的实例对象是存储属性的,比如说,现在堆里面的实例对象里面都存有姓 名、性别和年龄。每个属性又都有一个地址。 $p1=new Person();等号的右边$p1 是一个引用变量,通过赋值运算符“=”把对象的首地址 赋给“$p1”这个引用变量,所以$p1 是存储对象首地址的变量,$p1 放在栈内存里边,$p1 相当 于一个指针指向堆里面的对象,所以我们可以通过$p1 这个引用变量来操作对象,通常我们也 称对象引用为对象。

对你有帮助就点点关注,表示对我的支持谢谢

展开
收起

php中常用的数组函数,都在这里,有你不认识的吗?

至此,我们就已经熟悉了如何利用php对mysql数据库进行增删改查的操作,学习了数据库之后,我们来熟悉一些php中常用到的函数,今天我们就来学习php中常用到的数组函数。

1、count函数

count函数是用来计算数组内的元素的数目的一个函数,例子如下:

count($arr);

2、array_chunk函数

array_chunk函数是用来将一个数组拆分为多个数组块的,语法如下:array_chunk(“数组”,每个数组块元素的个数),例子如下:

array_chunk($arr, 2);//将$arr这个数组拆分为多个数组块,每个数组块有两个元素。

3、array_change_key_case函数

这个array_change_key_case函数用于将数组内的所有键都转换为大写或者是小写,格式如下:array_change_key_case(“数组”,case),例子如下:

array_change_key_case($arr,CASE_UPPER);//将$arr这个数组的键都转换为大写,CASE_UPPER表示大写,CASE_LOWER表示转换为小写。

4、array_keys函数

array_keys函数用于取得数组内的所有键值,这是一个非常实用的数组函数,格式很简单:array_keys(数组),例子如下:array_keys($arr);

5、array_pop

array_pop用于删除数组当中的最后一个元素,例子如下:

array_pop($shuzu);//删除$shuzu这个数组内的最后一个元素,删除成功则会返回数组中的最后一个元素,例子如下:

$shuzu=array("nihao","dfd","dfdf");

array_pop($shuzu);

结果将会返回dfdf这个元素。

6、array_unique函数

这个array_unique函数用于删除数组内重复的元素,这个在项目过程中也是经常用到的,格式:array_unique(数组),例子如下:

$shuzu5=array("1","2","4","4","1");

array_unique($shuzu5);

原数组将变成:array("1","2","4");

以上就是关于数组当中常用到的函数的其中一些函数,当然了,在数组中还有很多都是经常用到的,如sort(排序)、array_push(对数组的末尾进行插入元素)、array_sum(返回数组中所有的值的和)、array_rand(从数组中随机抽取一个元素)函数等等等。

展开
收起

你不知道的PHP中json函数

在使用php编程的场景中,总有一些情况下需要将数组转为json字符串,就需要用到php自带的json_encode函数;

但是当数组中含有中文字符串时,转出来的结果却是以下结果(unicode字符串):

<?php

$tmpArr = array(

'name' => '长裤',

'color' => 'blue',

'size' => 'XL',

'title' => '中年男装 长裤'

);

$tmpJson = json_encode($tmpArr);

echo $tmpJson;

输出:{"name":"\u957f\u88e4","color":"blue","size":"XL","title":"\u4e2d\u5e74\u7537\u88c5 \u957f\u88e4"}

要想中文不被转为unicode字符串,只需要给json_encode函数中传入一个参数JSON_UNESCAPED_UNICODE即可,如下:

<?php

$tmpArr = array(

'name' => '长裤',

'color' => 'blue',

'size' => 'XL',

'title' => '中年男装 长裤'

);

$tmpJson = json_encode($tmpArr,JSON_UNESCAPED_UNICODE);

echo $tmpJson;

输出:{"name":"长裤","color":"blue","size":"XL","title":"中年男装 长裤"}

但是PHP版本<5.4.0中并不支持以上参数JSON_UNESCAPED_UNICODE,这个时候我们可以通过以下方式解决:

$tmpArr = array(

'name' => '长裤',

'color' => 'blue',

'size' => 'XL',

'title' => '中年男装 长裤'

);

$tmpJson = json_encode($tmpArr);

$tmpJson = preg_replace_callback("#\\\u([0-9a-f]{4})#i",function($matchs){

return iconv('UCS-2BE', 'UTF-8', pack('H4', $matchs[1]));

},$tmpJson);

echo $tmpJson;

输出:{"name":"长裤","color":"blue","size":"XL","title":"中年男装 长裤"}

希望以上内容对你有用,感谢支持

展开
收起

php 中关于时区的那点事

科普一下什么是时区

众所周知,地球绕着太阳转的同时也会自转,因此同一时刻不同地区所接收到太阳照射的情况不同,所以有的地区是日出,有的地区是日落,还有的地区可能是黑夜.

既然地球上的不同地区时间不同,那总要有统一的时间刻度才能方便文化科技交流吧,不然大家说的都是当地时间,这样岂不是乱套了?

有问题就要解决问题,不同地区时间不同就要统一时间标准,而统一时间标准的前提就是要弄清楚全球的时间差异到底在哪以及各地的当地时间如何互相转换.

原来的时间标准是格林尼治标准时间,随着精确计时的发展需要,已被新的时间标准所取代,目前的时间标准是世界协调时.

现在有了统一的时间标准,不同地区的时间就可以统一换算成世界协调时再转换成当地时间了,再也不会出现同一时刻不同时间了!

示例:

北京时间(UTC+8) : 2019-05-30 13:30:00世界时间(UTC) : 2019-05-30 05:30:00东部时间(UTC-5) : 2019-05-30 00:30:00格林尼治标准时间

格林尼治标准时间(又称格林威治平均时间或格林威治标准时间,英文是GreenwichMeanTime,简称GMT),格林尼治标准时间的正午是指当太阳横穿格林尼治子午线时(也就是在格林尼治时)的时间.

格林尼治是英国伦敦的一个小镇,是地理经度的起点,本初子午线所在的经度是零度经度,所在的时区是零时区.

我们知道一天共有 24 小时,对应着全球 24 个时区,而地球自西向东自转,零时区后依次是东一区到东十一区,然后是东十二区.紧接着是西十二区,西十一区到西一区,最后又回到零时区.

其中东十二区和西十二区是同一个时区,又被称为东西十二区.

总的来说,时区分为东十二区和西十二区以及零时区,其中东西十二区是同一个时区,因此共有 24 个时区.

示例:

由于北京位于东八区,比零时区多个 8 个时区,意味着北京时间比格林标准时间快8 个小时.

所以,北京时间中午 12 点整的时候,格林尼治才清早 4 点钟,估计还在睡觉呢! ( GMT+8 就是北京时间)

格林尼治标准时间与地球自转有关,不能满足精确计时的需求,因此不再作为标准时间,取而代之的是协调世界时.

协调世界时

协调世界时(又称世界统一时间或世界标准时间或国际协调时间,英文是Coordinated Universal Time,简称UTC),协调世界时是以原子时秒长为基础,在时刻上尽量接近于格林尼治标准时间的一种时间计量系统.

在不需要精确到秒的情况下, GMT 和 UTC 基本一致,但 UTC 是以更加精确的原子时为基础,因此常用于科学计算领域,也是目前时间计量的统一标准.

示例:

北京时间 12:00 ,换算成 GMT 或 UTC 时间都是 04:00 ( UTC+8 也是北京时间)

北京时间

北京时间(又称中国标准时间),是首都北京所在的时区作为中国的标准时间,比格林尼治标准时间快8小时.

我国幅员辽阔,从西到东横跨东五,东六,东七,东八和东九等五个时区.所以全国统一采用首都北京所在的东八时区的区时作为标准时间,也就是北京时间.

时区信息数据库

时区信息数据库,又称 Olson数据库,是一个主要应用于电脑程序以及操作系统的可协作编辑世界时区信息的数据库.

时区信息数据库采用按“区域/位置”命名规范,方便应用于计算机世界,其中英文地名中的空格用下划线“_”代替,连词符“-”只在英文地名本身包含时使用.

示例:

Asia/Hong_Kong : 亚洲/香港Asia/Macau : 亚洲/澳门Asia/Shanghai : 亚洲/上海Asia/Taipei : 亚洲/台北Asia/Urumqi : 亚洲/乌鲁木齐上述时区主要是 php 中所支持的中国时区,参考 亚洲所支持的时区列表

关于时区的编程实现

时区不仅仅是现实生活的问题,计算机编程世界也有时间,自然也离不开时区的概念.

在计算机世界中,一切都是数据,最好时区的概念也能体现在相关数据库中,幸运的是已经有前辈为我们提供了时区信息数据库,而各类语言基本都会提供时区的工具类.

php 中的日期时间函数库是 php内置函数库,我们可以方便地操作时间,设置时区等.

正常情况下, date 扩展默认是启用的,我们可以输入 phpinfo 打印出 php 的基本信息,然后搜索关键字 date 就可以找到关于 date 扩展的相关信息.

示例

结果默认时区:当前时区: UTC当前时间: 2019-05-30 05:30:00

由此可见,假设不设置时区的话,默认时区是协调世界时,该时区和北京时间相比慢 8 个小时!

设置时区的三种姿势

翻阅 php 开发文档中可以找到目前所有支持时区列表,下面整理出关于中国的主要时区.

Asia/Hong_Kong : 亚洲/香港Asia/Macau : 亚洲/澳门Asia/Shanghai : 亚洲/上海Asia/Taipei : 亚洲/台北Asia/Urumqi : 亚洲/乌鲁木齐常用时区是上海,并没有北京,当然也可以设置成 PRC (中华人民共和国)!

如果没有设置时区的话,默认时区应该是协调世界时(UTC),虽说是通用的时间标准,但转换成当地时间还是需要一定换算的,而且看起来也不太舒服.

所以最好还是修改一下时区的设置项,如果业务不考虑国际化需求,那么永久性把时区固定就可以了,如果有国际化的业务场景,那么最好能够动态设置时区,这样就能清楚知道当地时间了.

因此,下面主要提供两种方式来设置时区,分别是静态设置和动态设置,其中动态设置又提供了两种方法.

静态修改 php 配置

php 的配置文件默认位于 : /private/etc/php.ini ,打开文件后修改 date.timezone 选项.

由于这种方法是直接修改配置文件,因此时区设置后适用于所有脚本,只不过需要重启服务器方可生效.

示例

结果# 去掉;并设置时区,取值可以是PRC,也可以是Asia/Shanghai等时区date.timezone = PRC详情请参考: http://php.net/date.timezone

动态设置 php 配置

ini_set 支持设置当前脚本的默认时区选项.

静态设置时区仅仅适合时区固定的情况,如果需要动态切换时区,修改配置文件就不能满足这种情况了.

因此,php 中还提供了动态修改 php.ini 配置文件的方法,ini_set() 方法刚好支持动态设置时区.

不用重启服务器,但仅仅针对当前脚本生效,其中 ini_set 方法支持的 php.ini 配置选项列表

示例

结果当前时区: Asia/Tokyo当前时间: 2019-05-30 14:30:00

动态设置 php 时区

date_default_timezone_set 方法用于设置当前脚本的默认时区.

ini_set 虽然支持设置时区选项,但毕竟不是专业设置时区的方法,date_default_timezone_set 才是专门设置时区的方法.

这两个方法都属于动态设置时区,也都是针对当前脚本生效,也都不用重启服务器就能立马生效.

示例

结果当前时区: Asia/Tokyo当前时区: UTC当前时间: 2019-05-30 05:30:00

关于时区的一些总结

时区和时间密切相关,统一时间说的其实是统一时间的标准,这样一个地区的当地时间就可以轻易转换成另一个地区的当地时间了.

目前世界上统一的时间标准是协调时间时(UTC),中国的时间标准是北京时间,北京时间比协调时间时快 8 个小时.

现实世界的时区也要反映到计算机世界,其中时区信息数据库就是用于表示现实世界的时区概念.

由此可见,时区是一个通用概念,不仅 php 有时区,java 和 js 等语言也有时区概念,可以说只要有时间的地方都离不开时区.关于时区的小技能,你 get 到了吗?

美剧<<闪电侠>>当地时间是星期二晚上八点开播,请问北京时间何时开播?英剧<<神探夏洛克>>北京时间凌晨四点半开播,请问当地时间是何时开播?泰剧<<新铁石心肠>>当地时间是晚上九点二十开播,请问北京时间是何时?参考资料

时区相关知识扫盲时区时差时间换算

展开
收起

PHP中解决跨域访问

PHP跨域访问

PHP是通过 header() 来设置Header头部来解决客户端的跨域问题的。1、允许单个域名访问指定某域名(a)跨域访问域名(z),则只需在b文件头部添加如下代码:<?phpheader('Access-Control-Allow-Origin:a');2、允许多个域名访问指定多个域名(a、b等)跨域访问(z),则只需在域名z项目的入口文件头部添加如下代码:<?php$origin = isset($_SERVER['HTTP_ORIGIN'])? $_SERVER['HTTP_ORIGIN'] : ''; $allow_origin = array( 'a', 'b' ); if(in_array($origin, $allow_origin)){ header('Access-Control-Allow-Origin:'.$origin); }3、允许所有域名访问允许所有域名访问,则只需在域名(z)文件头部添加如下代码:<?phpheader('Access-Control-Allow-Origin:*');4、设置Preflight Request(预检请求)中,将会在正式请求的 Access-Control-Expose-Headers 字段中出现的首部信息<?phpheader("Access-Control-Allow-Headers:Origin, X-Requested-With, Content-Type, Accept,Authorization");5、设置允许跨域请求的方法<?phpheader('Access-Control-Allow-Methods:GET,HEAD,POST,PATCH,PUT,OPTIONS,DELETE,CONNECT,TRACE');

6、Tips

请注意 header() 必须在任何实际输出之前调用,不管是普通的 HTML 标签,还是文件或 PHP 输出的空行,空格。这是个常见的错误,在通过include,require,或者其访问其他文件里面的函数的时候,如果在header()被调用之前,其中有空格或者空行。 同样的问题也存在于单独的 PHP/HTML 文件中。

设置中的选项值,有的并未给全,更多资料,详见【MDN WEB DOCS】

展开
收起

利用php中双等于和三等于的区别,无需密码拿到flag

这是一道CTF中常见的题目,我们来看一下题目描述(其实ctf中题目描述很多都是没用的,甚至还会误导我们)

题目描述先让我们找密码:

打开这个页面,似乎并没用什么东西出现。根据经验我们要看一下源码有没有东西!

右键查看源码:发现有个注释掉的index.txt

我们来看一下index.txt,果真提示性代码出来了。

isset($_GET['password'])//满足passwd不为null strcmp($_GET['password'], $flag) == 0//password和flag相等

其实这么多就这两行有用(让我想到了开发最后就是再写if/else),看到上面我注释好的passwd满足的条件了把,password不为null且password和flag字符串相同?

第一个不为null很好满足,那第二个条件呢?看似strcmp函数对比两个字符串相同则返回0否侧返回正数或者负数,但是很明显我们要是知道flag我们还做它干啥,这里一定要看清和0对比是用的==而不是===,这就是php的魅力,===是要类型,内容相等,而==只要内容相等即可。

什么是内容相等呢,false和0是相等的,那这里我们想strcmp函数中什么时候会返回false呢,只有当对比的两个对象不是同一类型时会返回false。

这里我们就想flag肯定是字符串,那我们让password为数组的情况下肯定返回为false了。

构造如下:

flag就出来了!

虽然这是一个CTF题目,但是php开发的小伙伴一定要注意再strcmp和==同时使用时候的特点,避免留下漏洞被利用。

展开
收起

PHP中的8个模板引擎

当我们在PHP中讨论模板引擎时,许多开发人员会告诉你,这是没有必要的,他们会说这是学习时间和资源的浪费,因为PHP本质上也是一个模板引擎。但是当你看过很多框架之后,你会发现很多框架都会有模板引擎的存在,所以说php中的模板引擎还是有必要了解一下的。

Mustache

受 ctemplate 和 et等的启发,Mustache 是一种与框架无关的方式来呈现无逻辑视图。正如 ctemplates 所说,"它强调将逻辑与表示分离:不可能将应用程序逻辑嵌入到这种模板语言中。视图不是由 ERB 或 HAML 组成的视图,而是包含随机帮助器和任意逻辑,而是分为两个部分:PHP 类和 HTML 模板。所有逻辑、决策和代码都包含在视图中。所有标记都包含在模板中。模板除了在视图中的引用方法外,什么都不做。这种严格的分离使编写干净的模板更容易,更容易测试视图,并且更有趣地处理应用的前端。

以下代码段提供了 Mustaches 语法外观的预览:

Hello {{name}}You have just won {{value}} dollars!{{#in_ca}}Well, {{taxed_value}} dollars, after taxes.{{/in_ca}}

Plates

plates是一个原生PHP模板系统,快速,易于使用,易于扩展是它的特性。它受到出色的 Twig 模板引擎的启发,并努力将现代模板语言功能引入 PHP 模板中。plates原生的PHP 模板而不是编译的模板语言(如 Twig 或 Smarty),因此受到对速度要求极致的开发人员喜爱。

此模板引擎具有:

原生的 PHP 模板,无需学习新语法plates是模板系统,而不是模板语言plates鼓励使用现有的PHP函数通过模板布局和继承增加代码重用用于将模板分组到命名空间的模板文件夹跨模板的数据共享将数据预先分配给特定模板内置逃生帮助器易于使用的功能和扩展与框架无关,将与任何项目配合使用分离设计使模板易于测试可以使用composer引入以下代码段提供了板模板引擎语法外观的预览:

<?php $this->layout('template', ['title' => 'User Profile']) ?><h1>Welcome!</h1><p>Hello <?=$this->e($name)?></p><h2>Friends</h2><ul> <?php foreach($friends as $friend): ?> <li> <a href="/profile/<?=$this->e($friend->id)?>"> <?=$this->e($friend->name)?> </a> </li> <?php endforeach ?></ul><?php if ($invitations): ?> <h2>Invitations</h2> <p>You have some friend invites!</p><?php endif ?>

Blade

blade是laravel内置的模板引擎。与其他流行的PHP模板引擎不同,Blade 不会限制您在视图中使用纯 PHP 代码。事实上,所有 Blade 视图都编译成普通的 PHP 代码并缓存,直到修改它们,这意味着 Blade 基本上为应用程序增加了零开销。视图文件使用 .blade.php 文件扩展名。

然而离开laravel,我们很少看到blade的身影,这也许也是它没有更流行的一个原因吧。

Volt

Volt 是一种超快且设计友好的模板语言,采用 C 来编写的。Volt 与 Phalcon 的其他组件高度集成,就像您可以在应用程序中将其用作独立组件一样。volt的灵感来自Jinja,最初由阿明·罗纳彻创作。。Volt 的语法和功能已经通过更多的元素进行了增强,当然,开发人员在使用 Phalcon 时已经习惯了它的极致性能。

以下代码段提供了 Volt 代码外观的快速预览:

{# app/views/products/show.volt #}{% block last_products %}{% for product in products %} * Name: {{ product.name|e }} {% if product.status === 'Active' %} Price: {{ product.price + product.taxes/100 }} {% endif %}{% endfor %}{% endblock %}

Dwoo

Dwoo 是 PHP 的现代、灵活和面向的对象模板引擎,有助于将表示 (HTML/CSS) 与应用程序逻辑分离。在许多方面,dwoo 与 Smarty 的模板和插件兼容,因为 dwoo 的作者基于 Smarty 引入到 Web 开发领域的一般想法。

Dwoo 的模板引擎是一个写得很好、面向对象的模板引擎,与 Smarty 相比,它允许更轻松、更快的开发,并且它仍然足够兼容,允许使用 Smarty 的开发人员平稳过渡到 dwoo。

以下代码段提供了 Dwoo 语法外观的预览:

<!DOCTYPE html><html> <head> <title>My Webpage</title> </head> <body> <ul id="navigation"> {foreach $navigation item} <li><a href="{$item.href}">{$item.caption}</a></li> {/foreach} </ul> <h1>My Webpage</h1> {$a_variable} </body></html>

Smarty

Smarty 是诞生非常早的 PHP 的模板引擎,它设计之初就是为了将表示 (HTML/CSS) 与应用程序逻辑分离。这意味着PHP代码是应用程序逻辑,并且与表示分离。Smarty 将模板的副本编译为 PHP 脚本。通过这种方式,您可以获得模板标记语法和 PHP 速度的优点。首次调用每个模板,然后从该点开始使用编译版本,编译一次。Smarty 会为您处理这一问题,因此模板设计器只需编辑 Smarty 模板,就更改了编译的版本,此方法使模板易于维护,并且由于编译的版本是PHP,操作代码加速器(如 APC 或 ZendCache)将继续处理已编译的脚本。

Smarty 是一个模板引擎,用作应用程序的 View 组件。Smarty 可轻松与上面列出的任何引擎耦合为视图组件。Smarty 不保证良好的应用程序设计或适当的演示分离,这仍然需要由有能力的开发人员和网页设计人员来解决。

以下代码段提供了语法外观的预览:

{include file="header.tpl" title="Info"}User Information:<p>Name: {$name|capitalize}<br>Address: {$address|escape}<br>{include file="footer.tpl"}

Twig

Twig 是 PHP 的模板语言。Twig 使用类似于 Django 和 Jinja 模板语言的语法,这些语言启发了 Twig 的发展。

快速: Twig编译模板到纯优化的 PHP 代码。与常规PHP代码相比,开销减少到最低限度。安全:Twig具有用于评估不受信任的模板代码的沙盒模式。这允许 Twig 用作用户可以修改模板设计的应用程序的模板语言。灵活:Twig由灵活的词汇和解析器提供动力。这允许开发人员定义自己的自定义标记和筛选器,并创建自己的 DSL。Twig 支持轻松构建强大模板所需的一切:多个继承、块、自动输出转义等等。语法易于学习,并已经过优化,使 Web 设计人员无需妨碍其操作即可快速完成工作。

以下代码段提供了此模板引擎语法的预览:

<div class="form-control"> <i class="fa fa-calendar"></i> {{ form_label(form.dueDate) }} {{ form_widget(form.dueDate) }} <small>{{ form_help(form.dueDate) }}</small> <div class="form-error"> {{ form_errors(form.dueDate) }} </div></div>

LATTE

latte也是PHP的模板引擎之一,它可简化您的工作并确保输出免受漏洞(如 XSS)的攻击。

latte是快速的:它编译模板到平原优化的PHP代码。latte是安全的:它是第一个引入内容感知的逃避的PHP引擎。latte是易用的:它有直观的语法,并可以帮助你轻松建立更好的网站。latte语法是:

<ul n:if="$items">{foreach $items as $item} <li id="item-{$iterator->counter}">{$item|capitalize}</li>{/foreach}</ul>

展开
收起

PHP中&符号的神秘用处

官方说明:

在 PHP 中引用意味着用不同的名字访问同一个变量内容。这并不像 C 的指针:例如你不能对他们做指针运算,他们并不是实际的内存地址。替代的是,引用是符号表别名。注意在PHP 中,变量名和变量内容是不一样的,因此同样的内容可以有不同的名字。最接近的比喻是 Unix 的文件名和文件本身——变量名是目录条目,而变量内容则是文件本身。引用可以被看作是 Unix 文件系统中的硬链接。

&:表示引用,在变量或者函数、对象等前面加上该符号

&符号使用场景

变量引用

引用允许用两个变量来指向同一个内容

变量引用

函数引用传递(传址调用)

可以将一个变量通过引用传递给函数,这样该函数就可以修改其参数的值

函数引用传递

函数引用返回

引用返回用在当想用函数找到引用应该被绑定在哪一个变量上面时。不要用返回引用来增加性能,引擎足够聪明来自己进行优化。仅在有合理的技术原因时才返回引用!

函数引用返回

对象引用

在PHP5以上,对象的 = 赋值和传递都是引用。要想实现拷贝副本,需要通过clone函数进行处理。

PHP中对象的深拷贝,指的是拷贝对象副本,也就是用clone函数拷贝出一个完全一样的对象,修改该对象,并不会影响原始对象;

PHP中对象的浅拷贝,指的是对象进行引用赋值,其中一个改变,另一个也随之改变。

对象引用

引用取消

使用unset(),unset 一个引用,只是断开了变量名和变量内容之间的绑定。(这并不意味着变量内容被销毁了)

展开
收起

PHP中“|”和“||”的简单比较

在PHP中“|”和“||”都是OR(或)运算符,那么它们之间有什么区别?下面本篇文章就来带大家认识一下运算符“|”和“||”,对它们进行简单比较,了解它们之间的区别。

运算符“|”

它是一个按位OR运算符,二元运算符;它对变量的位进行操作。如果有两个变量a,b,进行$a | $b;则是将把 $a 和 $b 中任何一个为 1 的位设为 1。

示例:

$a = 3; $b = 10; echo $a | $b; ?>

输出:

说明:

在上面的示例中,给定两个值,a = 3和b = 10;然后将这两个数字转换为二进制数,即a = 0011和b = 1010;最后应用OR(|)运算并计算$a | $b的值。

运算符“||”

这是一个逻辑OR运算符,布尔运算符;它对变量的布尔值进行操作。如果其中任何一个变量的布尔值为true,则$a || $b的值为1。

示例:

$a = 3; $b = 10; echo $a||$b; echo ''; if($a = 3 || $b = 0) echo '1'; else echo '0'; ?>

输出:

说明:

在上面的示例中,给定两个值,a = 3和b =10;因此变量a和变量b的布尔值都为true,则$a||$b的值为1;在if语句中,检查其中一个条件是否为真,因为变量a值被设置为3,布尔为true,因此执行“$a = 3 || $b = 0”的值为1。

以上就是本篇文章的全部内容,希望能对大家的学习有所帮助。更多精彩内容大家可以关注php中文网相关教程栏目!!!

展开
收起