php empty函数 使用说明
2015-01-24信息快讯网
对于我们做php开发的来说,empty函数(注,其实empty是一个语言结构而非函数,这里说函数只是个人习惯)是再熟悉不过的一个函数了,查PHP的手册描述如下
Determine whether a variable is considered to be empty.但是在我的记忆中,有很长一段时间一直以为empty应该是能够判断一个东西是否为空的,直到有一天我像这样“empty(trim($a))”使用的时候出现了error,然后查手册才知道了原来empty函数只能判断一个变量是否为空,而不能判断一个字符串(或者其他的值,包括函数返回值)为空。虽然知道了这只是一个表层的原因,但是却没有再去了解深层次的原因。
最近对php内核产生了兴趣,又再次想起了这个问题,于是按照别人的经验写了以下一段代码:
<?php echo "<pre>"; $tokens = token_get_all('<?php empty(trim($a));?>'); foreach($tokens as $t){ if (is_array($t)){ printf("%s \t %s \n", token_name($t[0]), htmlspecialchars($t[1])); }else{ printf("\t%s\n", $t); } }
结果输出如下:(这个如果不理解就看一下php手册附录的“List of Parser Tokens”那部分吧)
T_OPEN_TAG <?php
T_EMPTY empty
(
T_STRING trim
(
T_VARIABLE $a
)
)
T_CLOSE_TAG ?>
变量对应的token应该是T_VARIABLE,而trim($a)对应的是T_STRING。所以如果直接运行“empty(trim($a));”会导致运行错误:
Fatal error: Can't use function return value in write context
后来我想直接empty一个字符串会怎么样呢?结果导致的并不是运行错误,而是解析错误:
Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `'$'' in ...
(感觉这个错误信息让人。。。)
查看字符串对应的token是T_CONSTANT_ENCAPSED_STRING(字符串语法)。虽然参数对于的token有所不同,但是他们都不是T_VARIABLE,应该在编译的阶段就出现错误才对,为什么。。。
于是也学着那些高人们查看php的源码来了。。。不过还没读懂相关的代码,呵呵,下次再分享~
最后重申一次,empty是语言结构,而非函数!
(和print,echo,include,require,die等等一样都是语言结构,网上某些文章说print有返回值就说是函数是不对的)
常见的PHP五种设计模式小结
PHP中MVC模式的模板引擎开发经验分享
PHP面向接口编程 耦合设计模式 简单范例
PHP中用接口、抽象类、普通基类实现“面向接口编程”与“耦合方法”简述
php中取得URL的根域名的代码
php函数之子字符串替换 str_replace
开启CURL扩展,让服务器支持PHP curl函数(远程采集)
PHP中uploaded_files函数使用方法详解
PHP $_FILES函数详解
理解php Hash函数,增强密码安全
php empty,isset,is_null判断比较(差异与异同)
PHP isset()与empty()的使用区别详解
php empty函数判断mysql表单是否为空
php natsort内核函数浅析第1/2页
php 取得瑞年与平年的天数的代码
php 生成WML页面方法详解
彻底杜绝PHP的session cookie错误
PHP 5.3.0 安装分析心得
php 随机数的产生、页面跳转、件读写、文件重命名、switch语句
php 获得汉字拼音首字母的函数
PHP file_get_contents 函数超时的几种解决方法
PHP PDO函数库(PDO Functions)第1/2页
php str_pad 函数用法简介
php addslashes 函数详细分析说明
isset和empty的区别