PHP经典实例(php cookbook)读书笔记 (0x05)
0x05变量
empty()和isset()
empty()会告诉你一个值是否为空。
isset()会告诉你一个值是否设置。
空的定义
- integer ->0
- double ->0.0
- string->”“(空串)
- string->”0”(这个要注意字符串”0”也为空)
- boolean->false
- 数组->array()
- null
- 对象
empty()在5.5以前只允许传入参数,5.5以后可以传入表达式,
所以empty也可以用于检查函数返回是否为空。
5.0以前无属性的对象也为空。
-----------------------
默认值的设置
通常使用三元运算符+isset();
$val = isset($_GET['car']) ? $_GET['car'] : "default" ;
如果使用empty会把 0,“0”,false等合法的输入覆盖掉
使用isset时 ,只有值为null时也会被覆盖(也就是值未设置时);
特殊情况下可以考虑使用array_key_exists($keyname,$array[]);
不使用临时变量交换变量值
list( a, b) = array( b, a);
动态创建变量
$s = "name";
$$s = 111;
echo $name ;// 111
当变量名由函数等组成的表达式计算出来时,把表达式使用大括号括起来。
${find_this_name()} = 111;
跨域变量(全局变量)(静态变量)
你懂的,使用static
只在脚本执行到结束有效。
进程间共享变量
- 使用APC扩展。
- 使用shmop, System V存入内存。(windows上不可以使用System V)
- 使用文件,数据库保存。
复杂结构数据在url上传递
当一个复杂结构的数据要经过url进行传递的时候,可以使用下列两个方法,将数据存入单一变量。
- json_encode(), json_decode()
- serialze(),unserialze()
1.使用json 解码时开销会比serialze大,但是方便与js交互;
2.json_encode()的第二个参数为true时,会生成关联数值,如果没有生成一个stdClass对象
3.在url上使用serialize的数据要加上urlencode(),确保其url的元字符转义;
var_export(), var_dump(), printf_r();
- printf_f()只输出层级结构和值
- var_dump()还输出了各个变量的类型
- var_export()输出的是可以执行的数组代码
对于数组中引用类型 print_f(),和var_dump(),当第二次看到这个引用的对象时会输出RECURSION,var_export()则输出null;
当他们第二个参数为true时,会返回打印的信息而不打印
这时var_export()可以用来写配置文件
$content = "<?php \n return ".var_export($config);
file_put_contents('config.php', $content);
读取时
$config = require('config.php');
var_dump的返回值需要使用输出缓冲
ob_start();
var_dump($user);
$dump = ob_get_content();
ob_end_clean();