PHP经典实例读书笔记--变量
来源:互联网 发布:网络覆盖 新方法 编辑:程序博客网 时间:2024/06/14 03:43
1、变量的判断和地位
- 变量和条件逻辑是计算机程序之所以如此强大和灵活的核心。PHP是弱类型语言,不用事先定义变量类型,而是根据变量值来确定变量类型。
- 已赋值的变量就是已设置的变量,无论是true还是false,也无论为空。
- 对于变量的定义与删除,可以用isset()和unset()函数。
//isset()传入一个已经设置的变量时,就会返回true,无论变量的值为不为false$a = false;echo isset($a);//将一个变量变为未设置,可以使用unset或者将其值设置为null$b = 'hello';unset($b);$c = 'hi';$c = null;//empty()可以判断一个变量是否为空//常见的空值有0,0.0,“”,“0”,array(),false,NULL等if(empty(''){})
2、避免混淆 == 和 =
问题:
不想比较一个变量和一个常量时意外地赋值。
解决方案:
左边使用常量,右边使用变量
示例
//应当使用,如果写成 =,就会报错if(12 == $dwarves){...}//而不是if($dwarves == 12){...}//下面这种情况不会报错,会正常运行,引起不必要的错误if($dwarves = 12){...}//如果需要比较两个数据类型和变量值是否相同,应该使用===if(12 === $dwarves){...}
扩展:= 的有关文档http://www.php.net/operators.assignment
3、建立一个默认值
问题:
希望为一个还没有值得变量赋一个默认值,如果希望变量有一个硬编码的默认值,这个值可以被用户输入值覆盖或者通过一个环境变量覆盖,经常会这么做。
解决方案:
使用isset() 函数为一个可能已经有值的变量赋一个默认值。
示例
if(! isset($cars)){ $cars = $default_cars;}//使用三元表达是为一个新变量赋一个(可能默认的)值$cars = isset($_GET['cars']) ? $_GET['cars']:$default_cars;//检查数组使用array_key_exists()函数$car = array_key_exists('cars',$_GET)?$_GET['cars']:default_cars;//它和isset的区别在于,键存在但值为null时,isset返回为false,而自己为真。
扩展:isset的有关文档http://www.php.net/isset
4、交换值而不使用临时变量
问题:
希望交换两个变量的值,但不使用额外变量来存储临时值。
解决方案:
使用list() 函数来交换。
示例
//list()构造允许从一个数组想单个变量赋值$a = 'a';$b = 'b';//这个方法只是为了使代码更加清晰,而不能提升速度list($a,$b)=array($b,$a);
扩展:list()的有关文档http://www.php.net/list
5、创建动态变量名
问题:
希望动态构造一个变量名。例如,希望所使用的变量名与数据库查询中字段名匹配。
解决方案:
使用可变变量,就是在变量之前增加一个$前缀。
示例
$animal ='turtles';$turtles = '103';//先将右侧的变量解析变成值,再将其值变成一个变量。print $$animal;//可以通过{}来构造更复杂的表达式foreach($stooges as $s){ print "$s's real name was ${'stooge'.strtolower($s)}";}//但是一定要确保不能产生歧义,例如,不能区分$donkeys和$donkeys[12]$$donkeys[12];
6、跨函数调用持久存储局部变量的值
问题:
希望一个局部变量能够在函数调用之间保留它的值。
解决方案:
将变量声明为static。
示例
function track_times_called(){ static $i =0; $i++; return $i;}print track_times_called(); //输出为1print track_times_called(); //输出为2//在一个函数中,函数会记住这个变量的值,但是只在一次脚本调用期间有效。
扩展:static 的有关文档http://www.php.net/language.variables.scope
7、将复杂的数据类型封装在字符串中
问题:
希望得到一个数组或对象的字符串表示,以便存储在一个文件或数据库中,这个字符串应该可以很容易地重新构造元数组或对象。
解决方案:
使用serialize()或者json_encode()。
示例
//serialize()适用于PHP内部,编码不易被读懂,但是解码速度快。$array = array('sugar' => '2 lbs.','butter' => '3 sticks');$str_en = serialize($array);print $str_en;unserialize($str_en);//json_encode()适用于PHP与其他接口交互,编码简单,解码速度稍慢。$array = array('sugar' => '2 lbs.','butter' => '3 sticks');$str_en = json_encode($array);print $str_en;//json_decode中第二个参数true,表示解析成一个关联数组,否则默认解析成对象。json_decode($str_en,true);//输出a:2:{s:5:"sugar";s:6:"2 lbs.";s:6:"butter";s:8:"3 sticks";}{"sugar":"2 lbs.","butter":"3 sticks"}
扩展:json_encode() 的有关文档http://www.php.net/json_encode
8、变量内容转存为字符串
问题:
希望检查变量中存储的值。这可能是一个复杂的嵌套数组或对象,所以不能直接打印循环处理。
解决方案:
使用var_dump()、print_r()或者var_export()。
示例
$info = array('name'=>'frank',12.6,array(3,4));//var_export函数会生成合法的PHP代码,执行这个代码可以定义导出变量。//print_r()和var_export()都可以接受第二个参数,用变量来保存输出值。$str1 = print_r($info,true);$str2 = var_export($info,true);//var_dump()得到输出,需要使用输出缓冲:ob_start();var_dump($user);$dump = ob_get_contents();ob_end_clean();//这样就使得var_dump的内容放到了$dump中var_export($info);//输出array('name' => 'frank',0 =>12.6,1 =>array( 0 =>3, 1 =>4 ))
扩展:var_export() 的有关文档http://www.php.net/var_export
- PHP经典实例读书笔记--变量
- PHP经典实例读书笔记 (变量)
- PHP经典实例读书笔记--字符串
- PHP经典实例读书笔记--数字
- PHP经典实例读书笔记--函数
- PHP经典实例读书笔记--表单
- PHP经典实例读书笔记 (数组)
- PHP经典实例读书笔记--日期和时间
- PHP经典实例读书笔记--类和对象
- PHP经典实例读书笔记--Web基础
- PHP经典实例读书笔记(练习:日历)
- PHP经典实例读书笔记 (函数)
- PHP经典实例读书笔记(字符串,日期,时间)
- PHP经典实例读书笔记 (类和对象)
- 《PHP经典实例学习》之变量学习笔记
- 条件变量经典实例
- 《HTML5经典实例》读书笔记一
- 《HTML5经典实例》读书笔记二
- 一元二次方程
- CentOS7禁用ipv6
- 一段Spring代码引起的调用绑定总结
- SpringMVC中Controller的@ResponseBody注解分析
- SPOJ 1811. Longest Common Substring (LCS,两个字符串的最长公共子串, 后缀自动机SAM)
- PHP经典实例读书笔记--变量
- Python爬虫入门六
- SoapUI使用方法-01发送http请求
- Python 插入排序算法实现
- form表单中的label标签
- HDU 4436 str2int (后缀自动机SAM,多串建立)
- PLC简介
- 堆和栈的区别
- HDU 2222 ac自动机入门模板题