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中在数据库中保存Checkbox数据(1)
Oct 09 PHP
用php+mysql一个名片库程序
Oct 09 PHP
php中防止伪造跨站请求的小招式
Sep 02 PHP
php生成固定长度纯数字编码的方法
Jul 09 PHP
PHP开发中AJAX技术的简单应用
Dec 11 PHP
功能强大的php分页函数
Jul 20 PHP
laravel 5.1下php artisan migrate的使用注意事项总结
Jun 07 PHP
PHP基于socket实现的简单客户端和服务端通讯功能示例
Jul 10 PHP
PHP策略模式定义与用法示例
Jul 27 PHP
php实现微信企业号支付个人的方法详解
Jul 26 PHP
[原创]php token使用与验证示例【测试可用】
Aug 30 PHP
PHP创建XML接口示例
Jul 04 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新手上路(十三)
2006/10/09 PHP
PHP学习 运算符与运算符优先级
2008/06/15 PHP
用Zend Encode编写开发PHP程序
2010/02/21 PHP
Yii2针对指定url的生成及图片等的引入方法小结
2016/07/18 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
2018/02/07 PHP
YII框架常用技巧总结
2019/04/27 PHP
jquery 可排列的表实现代码
2009/11/13 Javascript
jQuery Ajax 仿AjaxPro.Utility.RegisterTypeForAjax辅助方法
2011/09/27 Javascript
利用js判断浏览器类型(是否为IE,Firefox,Opera浏览器)
2013/11/22 Javascript
表格奇偶行设置不同颜色的核心JS代码
2013/12/24 Javascript
Js表格万条数据瞬间加载实现代码
2014/02/20 Javascript
JS比较2个日期间隔的示例代码
2014/04/15 Javascript
JavaScript设计模式之单例模式实例
2014/09/24 Javascript
jQuery手动点击实现图片轮播特效
2020/04/20 Javascript
JavaScript模块化开发之SeaJS
2015/12/13 Javascript
JavaScript实现点击文本自动定位到下拉框选中操作
2016/06/15 Javascript
AngularJS基础 ng-model-options 指令简单示例
2016/08/02 Javascript
详解Vue.use自定义自己的全局组件
2017/06/14 Javascript
Vue.js实现一个todo-list的上移下移删除功能
2017/06/26 Javascript
vue2.0+SVG实现音乐播放圆形进度条组件
2019/09/21 Javascript
javascript+css实现进度条效果
2020/03/25 Javascript
python高阶爬虫实战分析
2018/07/29 Python
用Python编写一个简单的CS架构后门的方法
2018/11/20 Python
python图像和办公文档处理总结
2019/05/28 Python
详解Django3中直接添加Websockets方式
2020/02/12 Python
Python连接Hadoop数据中遇到的各种坑(汇总)
2020/04/14 Python
解决pycharm 格式报错tabs和space不一致问题
2021/02/26 Python
CLR与IL分别是什么含义
2016/08/23 面试题
关键字throw与throws的用法差异
2016/11/22 面试题
应届护士推荐信
2013/11/16 职场文书
教师党员承诺书
2014/03/25 职场文书
领导班子四风问题对照检查材料
2014/09/27 职场文书
拖欠货款起诉状
2015/05/20 职场文书
毕业实习感受与体会
2015/05/26 职场文书
格林童话读书笔记
2015/06/30 职场文书
关于k8s环境部署mysql主从的问题
2022/03/13 MySQL