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中的观察者模式
Mar 24 PHP
PHP和.net中des加解密的实现方法
Feb 27 PHP
php5.3 goto函数介绍和示例
Mar 21 PHP
php实现refresh刷新页面批量导入数据的方法
Dec 23 PHP
PHP利用hash冲突漏洞进行DDoS攻击的方法分析
Mar 26 PHP
PHP实现QQ登录实例代码
Jan 14 PHP
Laravel SQL语句记录方式(推荐)
May 26 PHP
PHP+原生态ajax实现的省市联动功能详解
Aug 15 PHP
详解PHP发送邮件知识点
May 06 PHP
PHP时间处理类操作示例
Sep 05 PHP
PHP中如何使用Redis接管文件存储Session详解
Nov 28 PHP
PHP创建XML的方法示例【基于DOMDocument类及SimpleXMLElement类】
Sep 10 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
星际原理概述
2020/03/04 星际争霸
解析PHP中如何将数组变量写入文件
2013/06/06 PHP
PHP常用设计模式之委托设计模式
2016/02/13 PHP
PHP页面输出时js设置input框的选中值
2016/09/30 PHP
如何取得中文输入的真实长度?
2006/06/24 Javascript
JavaScript DOM 学习第五章 表单简介
2010/02/19 Javascript
来自qq的javascript面试题
2010/07/24 Javascript
DWZ table的原生分页浅谈
2013/03/01 Javascript
js实现一个省市区三级联动选择框代码分享
2013/03/06 Javascript
通过上下左右键和回车键切换光标实现代码
2013/03/08 Javascript
js获取元素外链样式的方法
2015/01/27 Javascript
javascript常用函数(2)
2015/11/05 Javascript
xmlplus组件设计系列之网格(DataGrid)(10)
2017/05/05 Javascript
详解Vue 开发模式下跨域问题
2017/06/06 Javascript
初探Vue3.0 中的一大亮点Proxy的使用
2018/12/06 Javascript
Vue.use()在new Vue() 之前使用的原因浅析
2019/08/26 Javascript
vue的滚动条插件实现代码
2019/09/07 Javascript
JS操作Fckeditor的一些常用方法(获取、插入等)
2020/02/19 Javascript
[05:13]TI4 中国战队 机场出征!!
2014/07/07 DOTA
[05:37]DOTA2-DPC中国联赛 正赛 Elephant vs iG 选手采访
2021/03/11 DOTA
Python随手笔记之标准类型内建函数
2015/12/02 Python
详解Python连接MySQL数据库的多种方式
2019/04/16 Python
Python程序暂停的正常处理方法
2019/11/07 Python
基于python中__add__函数的用法
2019/11/25 Python
Python的对象传递与Copy函数使用详解
2019/12/26 Python
Python+Opencv实现把图片、视频互转的示例
2020/12/17 Python
python xlsxwriter模块的使用
2020/12/24 Python
详解通过变换矩阵实现canvas的缩放功能
2019/01/14 HTML / CSS
html5读取本地文件示例代码
2014/04/22 HTML / CSS
internal修饰符起什么作用
2013/12/16 面试题
公证委托书模板
2014/04/03 职场文书
人事主管岗位职责说明书
2014/07/30 职场文书
北京离婚协议书范文2014
2014/09/29 职场文书
小学语文教学反思范文
2016/03/03 职场文书
MySQL命令无法输入中文问题的解决方式
2021/08/30 MySQL
Spring Cloud Netflix 套件中的负载均衡组件 Ribbon
2022/04/13 Java/Android