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 相关文章推荐
phpMyAdmin2.11.6安装配置方法
Aug 24 PHP
在命令行下运行PHP脚本[带参数]的方法
Jan 22 PHP
PHP5中使用PDO连接数据库的方法
Aug 01 PHP
php获取本地图片文件并生成xml文件输出具体思路
Apr 27 PHP
linux命令之调试工具strace的深入分析
Jun 03 PHP
php中利用explode函数分割字符串到数组
Feb 08 PHP
PHP文件上传判断file是否己选择上传文件的方法
Nov 10 PHP
php实现的数字验证码及数字运算验证码
Jul 30 PHP
Yii控制器中操作视图js的方法
Jul 04 PHP
php实现微信扫码自动登陆与注册功能
Sep 22 PHP
JS+PHP实现用户输入数字后显示最大的值及所在位置
Jun 19 PHP
Laravel数据库读写分离配置的方法
Oct 13 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
造势之举?韩国总统候选人发布《星际争霸》地图
2017/04/22 星际争霸
PHP.MVC的模板标签系统(五)
2006/09/05 PHP
mac环境中使用brew安装php5.5.15
2014/08/18 PHP
11个PHPer必须要了解的编程规范
2014/09/22 PHP
php post大量数据时发现数据丢失问题解决方法
2015/06/20 PHP
在WordPress中使用wp-cron插件来设置定时任务
2015/12/10 PHP
Linux+Nginx+MySQL下配置论坛程序Discuz的基本教程
2015/12/23 PHP
thinkPHP数据库增删改查操作方法实例详解
2016/12/06 PHP
File文件控件,选中文件(图片,flash,视频)即立即预览显示
2009/04/09 Javascript
各浏览器对document.getElementById等方法的实现差异解析
2013/12/05 Javascript
jQuery基于当前元素进行下一步的遍历
2014/05/20 Javascript
JS合并数组的几种方法及优劣比较
2014/09/19 Javascript
JavaScript字符串对象substr方法入门实例(用于截取字符串)
2014/10/16 Javascript
jQuery将所有被选中的checkbox某个属性值连接成字符串的方法
2015/01/24 Javascript
jQuery实现的网页左侧在线客服效果代码
2015/10/23 Javascript
js实现的星星评分功能函数
2015/12/09 Javascript
Bootstrap学习笔记之css组件(3)
2016/06/07 Javascript
Vue数据驱动模拟实现5
2017/01/13 Javascript
vue-axios使用详解
2017/05/10 Javascript
vue利用axios来完成数据的交互
2018/03/23 Javascript
基于vue-router 多级路由redirect 重定向的问题
2018/09/03 Javascript
使用JS实现动态时钟
2020/03/12 Javascript
python三元运算符实现方法
2013/12/17 Python
python删除特定文件的方法
2015/07/30 Python
Python利用turtle库绘制彩虹代码示例
2017/12/20 Python
Python读取txt文件数据的方法(用于接口自动化参数化数据)
2018/06/27 Python
python3实现多线程聊天室
2018/12/12 Python
python随机在一张图像上截取任意大小图片的方法
2019/01/24 Python
Python 函数list&amp;read&amp;seek详解
2019/08/28 Python
python函数enumerate,operator和Counter使用技巧实例小结
2020/02/22 Python
python 在右键菜单中加入复制目标文件的有效存放路径(单斜杠或者双反斜杠)
2020/04/08 Python
Snapfish爱尔兰:在线照片打印和个性化照片礼品
2018/09/17 全球购物
澳洲Chemist Direct药房中文网:澳洲大型线上直邮药房
2019/11/04 全球购物
农民致富事迹材料
2014/01/23 职场文书
周年庆典邀请函范文
2014/01/24 职场文书
2015年学生会工作总结范文
2015/03/31 职场文书