php empty函数 使用说明


Posted in PHP onAugust 10, 2009

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函数memory_get_usage获取PHP内存清耗量的方法
Dec 06 PHP
PHP数组遍历知识汇总(包含遍历方法、数组指针操作函数、数组遍历测速)
Jul 05 PHP
php中$_GET与$_POST过滤sql注入的方法
Nov 03 PHP
推荐10个提供免费PHP脚本下载的网站
Dec 31 PHP
php批量删除超链接的实现方法
Oct 19 PHP
PHP连接数据库实现注册页面的增删改查操作
Mar 27 PHP
thinkPHP订单数字提醒功能的实现方法
Dec 01 PHP
php实现文件上传及头像预览功能
Jan 15 PHP
Yii 2.0实现联表查询加搜索分页的方法示例
Aug 02 PHP
[原创]php token使用与验证示例【测试可用】
Aug 30 PHP
ThinkPHP 3使用OSS的方法
Jul 19 PHP
laravel框架select2多选插件初始化默认选中项操作示例
Feb 18 PHP
php 取得瑞年与平年的天数的代码
Aug 10 #PHP
php 生成WML页面方法详解
Aug 09 #PHP
彻底杜绝PHP的session cookie错误
Aug 09 #PHP
PHP 5.3.0 安装分析心得
Aug 07 #PHP
php 随机数的产生、页面跳转、件读写、文件重命名、switch语句
Aug 07 #PHP
PHP 远程文件管理,可以给表格排序,遍历目录,时间排序
Aug 07 #PHP
PHP 翻页 实例代码
Aug 07 #PHP
You might like
在PHP中使用curl_init函数的说明
2010/11/02 PHP
无JS,完全php面向过程数据分页实现代码
2012/08/27 PHP
php 强制下载文件实现代码
2013/10/28 PHP
js利用div背景,做一个竖线的效果。
2008/11/22 Javascript
jQuery学习4 浏览器的事件模型
2010/02/07 Javascript
基于iframe实现类似于ajax的页面无刷新
2014/05/31 Javascript
js格式化时间小结
2014/11/03 Javascript
javascript中sort()的用法实例分析
2015/01/30 Javascript
用window.onerror捕获并上报Js错误的方法
2016/01/27 Javascript
js中最容易被忽视的事件问题大总结
2016/05/15 Javascript
AngularJS入门教程之表格实例详解
2016/07/27 Javascript
jQuery的Read()方法代替原生JS详解
2016/11/08 Javascript
angularjs过滤器--filter与ng-repeat配合有奇效
2017/04/20 Javascript
Angular4学习教程之DOM属性绑定详解
2018/01/04 Javascript
p5.js入门教程之键盘交互
2018/03/19 Javascript
微信小程序页面滚动到指定位置代码实例
2019/09/07 Javascript
[09:23]国际邀请赛采访专栏:iG战队VK,Tongfu战队Cu
2013/08/05 DOTA
[04:49]2014DOTA2国际邀请赛 Newbee顺利挺进总决赛 ImbaTV独家专访
2014/07/19 DOTA
python网络编程之TCP通信实例和socketserver框架使用例子
2014/04/25 Python
详解python使用递归、尾递归、循环三种方式实现斐波那契数列
2018/01/16 Python
Python模拟随机游走图形效果示例
2018/02/06 Python
python 获取等间隔的数组实例
2019/07/04 Python
OpenCV3.0+Python3.6实现特定颜色的物体追踪
2019/07/23 Python
python读取文件指定行内容实例讲解
2020/03/02 Python
Django更新models数据库结构步骤
2020/04/01 Python
python查看矩阵的行列号以及维数方式
2020/05/22 Python
Python 无限级分类树状结构生成算法的实现
2021/01/21 Python
CSS3绘制圆角矩形的简单示例
2015/09/28 HTML / CSS
户外婚礼策划方案
2014/02/08 职场文书
简单租房协议书(范本)
2014/10/13 职场文书
公司给客户的感谢信
2015/01/23 职场文书
毕业答辩开场白范文
2015/05/27 职场文书
班组长如何制订适合本班组的工作计划?
2019/07/10 职场文书
python flask开发的简单基金查询工具
2021/06/02 Python
浅析Python OpenCV三种滤镜效果
2022/04/11 Python
Android开发之底部导航栏的快速实现
2022/04/28 Java/Android