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 采集获取指定网址的内容
Jan 05 PHP
从手册去理解分析PHP session机制
Jul 17 PHP
PHPWind与Discuz截取字符函数substrs与cutstr性能比较
Dec 05 PHP
php使用codebase生成随机数
Mar 25 PHP
PHP动态生成javascript文件的2个例子
Apr 11 PHP
浅谈PHP中单引号和双引号到底有啥区别呢?
Mar 04 PHP
PHP中curl_setopt函数用法实例分析
Apr 16 PHP
PHP文件缓存类实现代码
Oct 26 PHP
详解PHP匿名函数与注意事项
Mar 29 PHP
php动态读取数据清除最右边距的方法
Apr 12 PHP
PHP中trait使用方法详细介绍
May 21 PHP
YII框架学习笔记之命名空间、操作响应与视图操作示例
Apr 30 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读取大文件的类SplFileObject使用介绍
2014/04/09 PHP
php生成随机字符串可指定纯数字、纯字母或者混合的
2014/04/18 PHP
PHP根据传入参数合并多个JS和CSS文件的简单实现
2014/06/13 PHP
php+memcache实现的网站在线人数统计代码
2014/07/04 PHP
PHP实现生成模糊图片的方法示例
2017/12/21 PHP
一个符号插入器 中用到的js代码
2007/09/04 Javascript
js单向链表的具体实现实例
2013/06/21 Javascript
使用闭包对setTimeout进行简单封装避免出错
2013/07/10 Javascript
JS操作数据库的实例代码
2013/10/17 Javascript
深入理解JavaScript系列(40):设计模式之组合模式详解
2015/03/04 Javascript
js判断手机系统是android还是ios
2017/03/07 Javascript
D3.js进阶系列之CSV表格文件的读取详解
2017/06/06 Javascript
Cropper.js 实现裁剪图片并上传(PC端)
2017/08/20 Javascript
JavaScript模拟实现自由落体效果
2018/08/28 Javascript
angular4 获取wifi列表中文显示乱码问题的解决
2018/10/20 Javascript
微信小程序判断用户是否需要再次授权获取个人信息
2019/07/18 Javascript
ES6 proxy和reflect的使用方法与应用实例分析
2020/02/15 Javascript
js数组相减简单示例【删除a数组所有与b数组相同元素】
2020/03/04 Javascript
[48:05]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 VGJ.T vs VP
2018/03/31 DOTA
[01:06:26]全国守擂赛第二周 Team Coach vs DeMonsTer
2020/04/28 DOTA
python复制文件代码实现
2013/12/23 Python
用Python编写一个简单的俄罗斯方块游戏的教程
2015/04/03 Python
Python实现发送QQ邮件的封装
2017/07/14 Python
python3连接MySQL数据库实例详解
2018/05/24 Python
30秒学会30个超实用Python代码片段【收藏版】
2019/10/15 Python
Python使用Socket实现简单聊天程序
2020/02/28 Python
PyCharm 无法 import pandas 程序卡住的解决方式
2020/03/09 Python
手把手教你将Flask应用封装成Docker服务的实现
2020/08/19 Python
使用html2canvas实现将html内容写入到canvas中生成图片
2020/01/03 HTML / CSS
寄语学生的话
2014/04/10 职场文书
大型会议策划方案
2014/05/17 职场文书
2015年小学生新年寄语
2014/12/08 职场文书
初中家长评语和期望
2014/12/26 职场文书
校运会加油稿大全
2015/07/22 职场文书
小学英语教学反思范文
2016/02/15 职场文书
入伍志愿书怎么写?
2019/07/19 职场文书