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 和 HTML
Oct 09 PHP
用PHP实现多服务器共享SESSION数据的方法
Mar 16 PHP
FleaPHP的安全设置方法
Sep 15 PHP
解析关于wamp启动是80端口被占用的问题
Jun 21 PHP
PHP Class&amp;Object -- PHP 自排序二叉树的深入解析
Jun 25 PHP
php统计时间和内存使用情况示例分享
Mar 13 PHP
PHP实现把MySQL数据库导出为.sql文件实例(仿PHPMyadmin导出功能)
May 10 PHP
PHP获取QQ达人QQ信息的方法
Mar 05 PHP
php操作(删除,提取,增加)zip文件方法详解
Mar 12 PHP
Laravel 5框架学习之Blade 简介
Apr 08 PHP
typecho插件编写教程(二):写一个新插件
May 28 PHP
PHPExcel中文帮助手册|PHPExcel使用方法(分享)
Jun 09 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
PHP4实际应用经验篇(7)
2006/10/09 PHP
什么是MVC,好东西啊
2007/05/03 PHP
PHP mysql与mysqli事务使用说明 分享
2013/08/17 PHP
php管理nginx虚拟主机shell脚本实例
2014/11/19 PHP
PHP判断网络文件是否存在的方法
2015/03/12 PHP
PHP5.6读写excel表格文件操作示例
2019/02/26 PHP
PHP实现限制域名访问的实现代码(本地验证)
2020/09/13 PHP
js常用代码段整理
2011/11/30 Javascript
使用js实现按钮控制文本框加1减1应用于小时+分钟
2013/12/09 Javascript
javascript操作table(insertRow,deleteRow,insertCell,deleteCell方法详解)
2013/12/16 Javascript
JS实现屏蔽shift,Ctrl,alt等功能键的方法
2015/06/01 Javascript
基于JavaScript实现瀑布流效果(循环渐近)
2016/01/27 Javascript
AngularJS directive返回对象属性详解
2016/03/28 Javascript
JavaScript callback回调函数用法实例分析
2018/05/08 Javascript
微信小程序嵌入腾讯视频源过程详解
2019/08/08 Javascript
JS Ajax请求会话过期处理问题解决方法分析
2019/11/16 Javascript
javascript canvas检测小球碰撞
2020/04/17 Javascript
原生JavaScript实现换肤
2021/02/19 Javascript
python中global用法实例分析
2015/04/30 Python
python实现数据导出到excel的示例--普通格式
2018/05/03 Python
python粘包问题及socket套接字编程详解
2019/06/29 Python
python 调用pyautogui 实时获取鼠标的位置、移动鼠标的方法
2019/08/27 Python
Python模拟登录之滑块验证码的破解(实例代码)
2019/11/18 Python
tensorflow模型的save与restore,及checkpoint中读取变量方式
2020/05/26 Python
Django中Aggregation聚合的基本使用方法
2020/07/09 Python
python绘制分布折线图的示例
2020/09/24 Python
基于CSS3的CSS 多栏(Multi-column)实现瀑布流源码分享
2014/06/11 HTML / CSS
伦敦一家非常流行的时尚精品店:Oxygen Boutique
2017/01/15 全球购物
Gerry Weber德国官网:优质女性时装,德国最大的时装公司之一
2019/11/02 全球购物
编辑求职信样本
2013/12/16 职场文书
趣味游戏活动方案
2014/02/07 职场文书
蓝颜请假条
2014/04/11 职场文书
校企合作协议书
2014/04/16 职场文书
班级学雷锋活动总结
2014/06/26 职场文书
故意伤害辩护词
2015/05/21 职场文书
CPU不支持Windows11系统怎么办
2021/11/21 数码科技