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 防恶意刷新实现代码
May 16 PHP
php自定义函数之递归删除文件及目录
Aug 08 PHP
取得单条网站评论以数组形式进行输出
Jul 28 PHP
PHP图片自动裁切应付不同尺寸的显示
Oct 16 PHP
thinkphp获取栏目和文章当前位置的方法
Oct 29 PHP
html静态页面调用php文件的方法
Nov 13 PHP
PHP使用flock实现文件加锁的方法
Jul 01 PHP
php实现简易聊天室应用代码
Sep 23 PHP
WordPress中对访客评论功能的一些优化方法
Nov 24 PHP
thinkPHP框架可添加js事件的分页类customPage.class.php完整实例
Mar 16 PHP
PHP convert_cyr_string()函数讲解
Feb 13 PHP
PHP执行系统命令函数实例讲解
Mar 03 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
PHILIPS AE3805收音机的分析打磨
2021/03/02 无线电
php中current、next与reset函数用法实例
2014/11/17 PHP
php使用Cookie实现和用户会话的方法
2015/01/21 PHP
php正则preg_replace_callback函数用法实例
2015/06/01 PHP
php目录拷贝实现方法
2015/07/10 PHP
PHP基于yii框架实现生成ICO图标
2015/11/13 PHP
php面向对象值单例模式
2016/05/03 PHP
php compact 通过变量创建数组
2016/11/15 PHP
php 常用的系统函数
2017/02/07 PHP
ThinkPHP框架中使用Memcached缓存数据的方法
2018/03/31 PHP
Windows上php5.6操作mongodb数据库示例【配置、连接、获取实例】
2019/02/13 PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
2019/12/20 PHP
PNGHandler-借助JS让PNG图在IE下实现透明(包括背景图)
2007/08/31 Javascript
javascript 日期时间 转换的方法
2013/02/21 Javascript
JavaScript中的style.cssText使用教程
2014/11/06 Javascript
Highcharts使用简例及异步动态读取数据
2015/12/30 Javascript
javascript拖拽效果延伸学习
2016/04/04 Javascript
jQuery Validate表单验证插件的基本使用方法及功能拓展
2017/01/04 Javascript
vue elementui form表单验证的实现
2018/11/11 Javascript
jQuery选择器之基本选择器用法实例分析
2019/02/19 jQuery
Nodejs中的require函数的具体使用方法
2019/04/02 NodeJs
vue.js中导出Excel表格的案例分析
2019/06/11 Javascript
python赋值操作方法分享
2013/03/23 Python
使用Python的web.py框架实现类似Django的ORM查询的教程
2015/05/02 Python
Python合并两个字典的常用方法与效率比较
2015/06/17 Python
Python数据分析之双色球统计单个红和蓝球哪个比例高的方法
2018/02/03 Python
python求解数组中两个字符串的最小距离
2018/09/27 Python
Python pygame绘制文字制作滚动文字过程解析
2019/12/12 Python
python selenium自动化测试框架搭建的方法步骤
2020/06/14 Python
使用keras内置的模型进行图片预测实例
2020/06/17 Python
中医专业应届生求职信
2013/11/17 职场文书
教师自我评价范文
2013/12/16 职场文书
国税会议欢迎词
2014/01/16 职场文书
临床医学专业求职信
2014/08/08 职场文书
深入浅出的讲解:信号调制到底是如何实现的
2022/02/18 无线电
Win11快速关闭所有广告推荐
2022/04/19 数码科技