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 相关文章推荐
第十二节--类的自动加载
Nov 16 PHP
不要轻信 PHP_SELF的安全问题
Sep 05 PHP
php 生成静态页面的办法与实现代码详细版
Feb 15 PHP
PHP中获取内网用户MAC地址(WINDOWS/linux)的实现代码
Aug 11 PHP
PHP IF ELSE简化/三元一次式的使用
Aug 22 PHP
基于Zend的Config机制的应用分析
May 02 PHP
PHP常用的缓存技术汇总
May 05 PHP
php生成固定长度纯数字编码的方法
Jul 09 PHP
php文件上传类完整实例
May 14 PHP
浅析Laravel5中队列的配置及使用
Aug 04 PHP
关于PHP中字符串与多进制转换函数的实例代码
Nov 03 PHP
PHP序列化和反序列化深度剖析实例讲解
Dec 29 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 zlib压缩和解压缩swf文件的代码
2008/12/30 PHP
php实用代码片段整理
2016/11/12 PHP
thinkPHP中_initialize方法实例分析
2016/12/05 PHP
PHP使用两个栈实现队列功能的方法
2018/01/15 PHP
PHP关于foreach复制知识点总结
2019/01/28 PHP
innerhtml用法 innertext用法 以及innerHTML与innertext的区别
2009/10/26 Javascript
JavaScript 序列化对象实现代码
2009/12/18 Javascript
jQuery-Easyui 1.2 实现多层菜单效果的代码
2012/01/13 Javascript
多次注册事件会导致一个事件被触发多次的解决方法
2013/08/12 Javascript
jquery.cookie用法详细解析
2013/12/18 Javascript
浅谈javascript事件取消和阻止冒泡
2015/05/26 Javascript
基于JavaScript判断浏览器到底是关闭还是刷新(超准确)
2016/02/01 Javascript
3kb jQuery代码搞定各种树形选择的实现方法
2016/06/10 Javascript
NPM 安装cordova时警告:npm WARN deprecated minimatch@2.0.10: Please update to minimatch 3.0.2 or higher to
2016/12/20 Javascript
import与export在node.js中的使用详解
2017/09/28 Javascript
详解Vuex中mapState的具体用法
2017/09/28 Javascript
使用vue-cli编写vue插件的方法
2018/02/26 Javascript
js中时间格式化的几种方法
2018/07/22 Javascript
JS中的算法与数据结构之链表(Linked-list)实例详解
2019/08/20 Javascript
Vue中使用matomo进行访问流量统计的实现
2019/11/05 Javascript
微信小程序8种数据通信的方式小结
2020/02/03 Javascript
vue 解决provide和inject响应的问题
2020/11/12 Javascript
[51:07]VGJ.S vs Pain 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
python编写简单爬虫资料汇总
2016/03/22 Python
Python使用matplotlib实现基础绘图功能示例
2018/07/03 Python
Tensorflow tf.nn.atrous_conv2d如何实现空洞卷积的
2020/04/20 Python
Python 字节流,字符串,十六进制相互转换实例(binascii,bytes)
2020/05/11 Python
python实现逢七拍腿小游戏的思路详解
2020/05/26 Python
python try...finally...的实现方法
2020/11/25 Python
牛津在线药房:Oxford Online Pharmacy
2020/11/16 全球购物
面向对象概念面试题(.NET)
2016/11/04 面试题
实习指导老师评语
2014/04/26 职场文书
《山谷中的谜底》教学反思
2014/04/26 职场文书
活动简报范文
2015/07/22 职场文书
python实现简易名片管理系统
2021/04/11 Python
2007年老电脑安装win11会怎么样? 网友实测win11在老电脑运行良好
2021/11/21 数码科技