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 trim 去除空字符的定义与语法介绍
May 31 PHP
php 实现进制转换(二进制、八进制、十六进制)互相转换实现代码
Oct 22 PHP
php中将网址转换为超链接的函数
Sep 02 PHP
LotusPhp笔记之:Cookie组件的使用详解
May 06 PHP
zf框架的校验器使用使用示例(自定义校验器和校验器链)
Mar 13 PHP
CI框架在CLI下执行占用内存过大问题的解决方法
Jun 17 PHP
PHP+jQuery 注册模块的改进(一):验证码存入SESSION
Oct 14 PHP
php实现源代码加密的方法
Jul 11 PHP
PHP常见漏洞攻击分析
Feb 21 PHP
php处理单文件、多文件上传代码分享
Aug 24 PHP
PHP文件操作实例总结
Sep 27 PHP
php四种定界符详解
Feb 16 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
改造一台复古桌面收音机
2021/03/02 无线电
PHP array_push 数组函数
2009/12/26 PHP
php官方微信接口大全(微信支付、微信红包、微信摇一摇、微信小店)
2015/12/21 PHP
微信公众平台开发教程⑤ 微信扫码支付模式介绍
2019/04/10 PHP
jQuery动态添加的元素绑定事件处理函数代码
2011/08/02 Javascript
解决window.opener=null;window.close(),只支持IE6不支持IE7,IE8的问题
2014/01/14 Javascript
JavaScript实现的简单烟花特效代码
2015/10/20 Javascript
实例讲解js验证表单项是否为空的方法
2016/01/09 Javascript
jquery跟随屏幕滚动效果的实现代码
2016/04/13 Javascript
利用jQuery实现打字机字幕效果实例代码
2016/09/02 Javascript
炫酷的js手风琴效果
2016/10/13 Javascript
JavaScript中定时控制Throttle、Debounce和Immediate详解
2016/11/17 Javascript
详解能在多种前端框架下使用的表格控件
2017/01/11 Javascript
JavaScript实现一个空中避难的小游戏
2017/06/06 Javascript
vue2.0 循环遍历加载不同图片的方法
2018/03/06 Javascript
基于nodejs res.end和res.send的区别
2018/05/14 NodeJs
微信小程序分享功能之按钮button 边框隐藏和点击隐藏
2018/06/14 Javascript
详解Axios统一错误处理与后置
2018/09/26 Javascript
layui table 列宽百分比显示的实现方法
2019/09/28 Javascript
React 父子组件通信的实现方法
2019/12/05 Javascript
jQuery实现获取多选框的值示例
2020/02/07 jQuery
nuxt 自定义 auth 中间件实现令牌的持久化操作
2020/11/05 Javascript
[43:32]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS NewBee第一场
2014/05/26 DOTA
[03:23:49]2016.12.17日完美“圣”典全回顾
2016/12/19 DOTA
[56:46]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 VP vs Effect
2018/04/01 DOTA
Python实现抓取百度搜索结果页的网站标题信息
2015/01/22 Python
python实现在每个独立进程中运行一个函数的方法
2015/04/23 Python
Python类的动态修改的实例方法
2017/03/24 Python
Python数据结构与算法之常见的分配排序法示例【桶排序与基数排序】
2017/12/15 Python
Python实现自定义函数的5种常见形式分析
2018/06/16 Python
Python对切片命名的实现方法
2018/10/16 Python
Python使用Pandas对csv文件进行数据处理的方法
2019/08/01 Python
初中生学习的自我评价
2013/11/14 职场文书
离婚协议书范文2014(夫妻感情破裂)
2014/12/14 职场文书
《攀登者》:“海拔8000米以上,你不能指望任何人”
2019/11/25 职场文书
详解Vue3使用axios的配置教程
2022/04/29 Vue.js