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
php adodb分页实现代码
Mar 19 PHP
PHP中break及continue两个流程控制指令区别分析
Apr 18 PHP
PHP动态创建Web站点的方法
Aug 14 PHP
PHP中去掉字符串首尾空格的方法
May 19 PHP
PHP基础陷阱题(变量赋值)
Sep 12 PHP
yii2高级应用之自定义组件实现全局使用图片上传功能的方法
Oct 08 PHP
PHP使用Redis替代文件存储Session的方法
Feb 15 PHP
PHP处理bmp格式图片的方法分析
Jul 04 PHP
PHP读取CSV大文件导入数据库的实例
Jul 24 PHP
浅谈PHP发送HTTP请求的几种方式
Jul 25 PHP
MacOS下PHP7.1升级到PHP7.4.15的方法
Feb 22 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初学者常见问题集合 修正版(21问答)
2010/03/23 PHP
Laravel 加载第三方类库的方法
2018/04/20 PHP
Prototype1.5 rc2版指南最后一篇之Position
2007/01/10 Javascript
JQuery中的ready函数冲突的解决方法
2010/05/17 Javascript
Three.js源码阅读笔记(物体是如何组织的)
2012/12/27 Javascript
JavaScript实现的一个日期格式化函数分享
2014/12/06 Javascript
jquery实现点击向下展开菜单项(伸缩导航)效果
2015/08/22 Javascript
javascript html5移动端轻松实现文件上传
2020/03/27 Javascript
动态更新highcharts数据的实现方法
2016/05/28 Javascript
Node.js环境下编写爬虫爬取维基百科内容的实例分享
2016/06/12 Javascript
Bootstrap基本组件学习笔记之下拉菜单(7)
2016/12/07 Javascript
JS实现HTML标签转义及反转义
2020/04/14 Javascript
微信小程序开发之实现自定义Toast弹框
2017/06/08 Javascript
深入理解Vue生命周期、手动挂载及挂载子组件
2017/09/27 Javascript
浅谈在Vue.js中如何实现时间转换指令
2019/01/06 Javascript
vue中的 $slot 获取插槽的节点实例
2019/11/12 Javascript
vue输入框使用模糊搜索功能的实现代码
2020/05/26 Javascript
uniapp 仿微信的右边下拉选择弹出框的实现代码
2020/07/12 Javascript
python对字典进行排序实例
2014/09/25 Python
Python数据结构与算法之常见的分配排序法示例【桶排序与基数排序】
2017/12/15 Python
详解Python 字符串相似性的几种度量方法
2019/08/29 Python
python3.7将代码打包成exe程序并添加图标的方法
2019/10/11 Python
python判断无向图环是否存在的示例
2019/11/22 Python
pytorch使用tensorboardX进行loss可视化实例
2020/02/24 Python
程序设计HTML5 Canvas API
2013/04/08 HTML / CSS
canvas生成带二维码海报的踩坑记录
2019/09/11 HTML / CSS
英国度假别墅预订:Sykes Cottages
2017/06/12 全球购物
天游软件面试
2013/11/23 面试题
11月升旗仪式讲话稿
2014/02/15 职场文书
爱之链教学反思
2014/04/30 职场文书
2015年教研室工作总结范文
2015/05/23 职场文书
观看《筑梦中国》纪录片心得体会
2016/01/18 职场文书
高中16字霸气押韵班级口号集锦!
2019/06/27 职场文书
用golang如何替换某个文件中的字符串
2021/04/25 Golang
KVM基础命令详解
2022/04/30 Servers
win10电脑双屏显示一个黑屏怎么办?win10电脑双屏显示一个黑屏解决方法
2022/07/15 数码科技