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 相关文章推荐
文件上传的实现
Oct 09 PHP
二十行语句实现从Excel到mysql的转化
Oct 09 PHP
PHP实现网上点歌(二)
Oct 09 PHP
php中对2个数组相加的函数
Jun 24 PHP
优化PHP程序的方法小结
Feb 23 PHP
PHP中if和or运行效率对比
Dec 12 PHP
学习PHP的数组总结【经验】
May 05 PHP
PHP使用内置函数生成图片的方法详解
May 09 PHP
php中引用符号(&amp;)的使用详细介绍
Dec 06 PHP
php安装dblib扩展,连接mssql的具体步骤
Mar 02 PHP
php学习笔记之字符串常见操作总结
Jul 16 PHP
PHP 自动加载类原理与用法实例分析
Apr 14 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
点评山进PR-D3L三波段收音机
2021/03/02 无线电
写一个用户在线显示的程序
2006/10/09 PHP
PHP中将字符串转化为整数(int) intval() printf() 性能测试
2020/03/20 PHP
PHP+jQuery 注册模块的改进(三):更新到Smarty3.1
2014/10/14 PHP
Windows下Apache + PHP SESSION丢失的解决过程全纪录
2015/04/07 PHP
使用Appcan客户端自动更新PHP版本号(全)
2015/07/31 PHP
Yii安装与使用Excel扩展的方法
2016/07/13 PHP
一段好玩的JavaScript代码
2006/12/01 Javascript
javascript的trim,ltrim,rtrim自定义函数
2008/09/21 Javascript
动态添加option及createElement使用示例
2014/01/26 Javascript
JS实现控制表格单元格垂直对齐的方法
2015/03/30 Javascript
原生JavaScript实现瀑布流布局
2020/06/28 Javascript
详解JS中遍历语法的比较
2017/04/07 Javascript
基于Vue2的独立构建与运行时构建的差别(详解)
2017/12/06 Javascript
Python版实现微信公众号扫码登陆
2020/05/28 Javascript
在vue中实现给每个页面顶部设置title
2020/07/29 Javascript
[01:23:35]Ti4主赛事胜者组 DK vs EG 1
2014/07/19 DOTA
Python numpy 常用函数总结
2017/12/07 Python
Python实现字典(dict)的迭代操作示例
2018/06/05 Python
python爬虫之urllib库常用方法用法总结大全
2018/11/14 Python
Pycharm 实现下一个文件引用另外一个文件的方法
2019/01/17 Python
python3+selenium实现qq邮箱登陆并发送邮件功能
2019/01/23 Python
python实现弹窗祝福效果
2019/04/07 Python
python opencv实现图像边缘检测
2019/04/29 Python
详解Python3 对象组合zip()和回退方式*zip
2019/05/15 Python
TensorFlow固化模型的实现操作
2020/05/26 Python
Python的控制结构之For、While、If循环问题
2020/06/30 Python
Python3获取cookie常用三种方案
2020/10/05 Python
浅析canvas元素的html尺寸和css尺寸对元素视觉的影响
2019/07/22 HTML / CSS
教育系毕业生中文求职信范文
2013/10/06 职场文书
合伙经营协议书
2014/04/18 职场文书
中学生爱国演讲稿
2014/09/05 职场文书
医德医风个人总结
2015/02/28 职场文书
应届生简历自我评价
2015/03/11 职场文书
2015年高校保卫处工作总结
2015/07/23 职场文书
python爬不同图片分别保存在不同文件夹中的实现
2021/04/02 Python