1.要输出大段文本时,跳出 PHP 解析模式通常比将文本通过 echo或 print输出更有效率。就是说混编模式中 echo 结构比直接写html结构效率低
2.文件末尾的 PHP 代码段结束标记(分号)可以不要,有些情况下当使用 include或者 require时省略掉会更好些,这样不期望的空白符就不会出现在文件末尾,之后仍然可以输出响应标头。在使用输出缓冲时也很便利,就不会看到由包含文件生成的不期望的空白符。
3.以十进制能够精确表示的有理数如 0.1 或 0.7,无论有多少尾数都不能被内部所使用的二进制精确表示,因此不能在不丢失一点点精度的情况下转换为二进制的格式。这就会造成混乱的结果:例如,floor((0.1+0.7)*10)通常会返回7 而不是预期中的 8,因为该结果内部的表示其实是类似 7.9999999999999991118...。
4.任何具有 string表达的标量变量,数组单元或对象属性都可使用此语法。只需简单地像在 string以外的地方那样写出表达式,然后用花括号 { 和 } 把它括起来即可。由于 { 无法被转义,只有$紧挨着 { 时才会被识别。可以用 {\$ 来表达 {$。例如: "this is a {$model->attr} demo"
5.另外还有 URL 字符串函数,也有加密/解密字符串的函数(mcrypt 和mhash)。自 5.4 起可以使用短数组定义语法,用[] 替代 array()。$arr = array('x'=>1) = ['x'=>1]
6.如果给出方括号但没有指定键名,则取当前最大整数索引值,新的键名将是该值加上 1(但是最小为 0)。如果当前还没有整数索引,则键名将为 0。
注意这里所使用的最大整数键名不一定当前就在数组中。它只要在上次数组重新生成索引后曾经存在过就行了。以下面的例子来说明:
<?php
// 创建一个简单的数组
$array = array( 1 , 2 , 3 , 4 , 5 );
print_r ( $array );
// 现在删除其中的所有元素,但保持数组本身不变:
foreach ( $array as $i => $value ) {
unset( $array [ $i ]);
}
print_r ( $array );
// 添加一个单元(注意新的键名是 5,而不是你可能以为的 0)
$array [] = 6 ;
print_r ( $array );
// 重新索引:
$array = array_values ( $array );
$array [] = 7 ;
print_r ( $array );
?>
以上例程会输出:
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
)
Array
(
)
Array
(
[5] => 6
)
Array
(
[0] => 6
[1] => 7
)
7.如果将一个对象转换成对象,它将不会有任何变化。如果其它任何类型的值被转换成对象,将会创建一个内置类 stdClass 的实例。如果该值为NULL
,则新的实例为空。数组转换成对象将使键名成为属性名并具有相对应的值。对于任何其它的值,名为 scalar 的成员变量将包含该值。
<?php
$obj = (object) 'ciao' ;
echo $obj -> scalar ; // outputs 'ciao'
?>
8.在函数原型中,$...
表示等等的意思。当一个函数可以接受任意个参数时使用此变量名。
9.void 作为返回类型意味着函数的返回值是无用的。void作为参数列表意味着函数不接受任何参数。
10由于 PHP 支持使用和数组下标同样的语法访问字符串下标,以下例子在所有 PHP 版本中都有效:
<?php
$a = 'car' ; // $a is a string
$a [ 0 ] = 'b' ; // $a is still a string
echo $a ; // bar
?>
12.要将可变变量用于数组,必须解决一个模棱两可的问题。这就是当写下 $$a[1]时,解析器需要知道是想要 $a[1] 作为一个变量呢,还是想要$$a 作为一个变量并取出该变量中索引为 [1] 的值。解决此问题的语法是,对第一种情况用${$a[1]} ,对第二种情况用 ${$a}[1] 。
13.变量名中的点和空格被转换成下划线。例如 <input name="a.b" /> 变成了 $_REQUEST["a_b"]。
<?php
var_dump ( 0 == "a" ); // 0 == 0 -> true
var_dump ( "1" == "01" ); // 1 == 1 -> true
var_dump ( "10" == "1e1" ); // 10 == 10 -> true
var_dump ( 100 == "1e2" ); // 100 == 100 -> true
switch ( "a" ) {
case 0 :
echo "0" ;
break;
case "a" : // never reached because "a" is already matched with 0
echo "a" ;
break;
}
?>
<?php
$i = 'W' ;
for ( $n = 0 ; $n < 6 ; $n ++) {
echo ++ $i . "\n" ;
}
?>
以上例程会输出:
X
Y
Z
AA
AB
AC
<?php
$greet = function( $name )
{
printf ( "Hello %s\r\n" , $name );
};
$greet ( 'World' );
$greet ( 'PHP' );
?>
NULL
被序列化,并产生一个 E_NOTICE
级别的错误。
与之相反, unserialize() 会检查是否存在一个 __wakeup()方法。如果存在,则会先调用 __wakeup 方法,预先准备对象需要的资源。
__wakeup() 经常用在反序列化操作中,例如重新建立数据库连接,或执行其它初始化操作。
23.