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 相关文章推荐
PHP5中MVC结构学习
Oct 09 PHP
PHP中$_SERVER的详细参数与说明
Jul 29 PHP
php的memcached客户端memcached
Jun 14 PHP
解析左右值无限分类的实现算法
Jun 20 PHP
PHP开源开发框架ZendFramework使用中常见问题说明及解决方案
Jun 12 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十五)
Jun 30 PHP
php注册审核重点解析(数据访问)
May 23 PHP
老生常谈php中传统验证与thinkphp框架(必看篇)
Jun 10 PHP
Yii框架常见缓存应用实例小结
Sep 09 PHP
PHP dirname简单使用代码实例
Nov 13 PHP
Jsonp劫持学习
Apr 01 PHP
详解PHP Swoole与TCP三次握手
May 27 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定时删除文件夹下文件(清理缓存文件)
2013/01/23 PHP
thinkphp学习笔记之多表查询
2014/07/28 PHP
php中Socket创建与监听实现方法
2015/01/05 PHP
显示js对象所有属性和方法的函数
2009/10/16 Javascript
js实现拖拽 闭包函数详细介绍
2012/11/25 Javascript
如何使用jQUery获取选中radio对应的值(一句代码)
2013/06/03 Javascript
jquery 获取dom固定元素 添加样式的简单实例
2014/02/04 Javascript
Blocksit插件实现瀑布流数据无限( 异步)加载
2014/06/20 Javascript
JQuery做的一个简单的点灯游戏分享
2014/07/16 Javascript
使用jQuery.wechat构建微信WEB应用
2014/10/09 Javascript
jQuery+canvas实现的球体平抛及颜色动态变换效果
2016/01/28 Javascript
利用node.js实现自动生成前端项目组件的方法详解
2017/07/12 Javascript
jQuery 同时获取多个标签的指定内容并储存为数组
2018/11/20 jQuery
详解nuxt路由鉴权(express模板)
2018/11/21 Javascript
微信小程序利用Canvas绘制图片和竖排文字详解
2019/06/25 Javascript
如何在Angular8.0下使用ngx-translate进行国际化配置
2019/07/24 Javascript
微信小程序 调用远程接口 给全局数组赋值代码实例
2019/08/13 Javascript
jquery实现上传图片功能
2020/06/29 jQuery
手把手带你搭建一个node cli的方法示例
2020/08/07 Javascript
Python字符串、元组、列表、字典互相转换的方法
2016/01/23 Python
Python过滤列表用法实例分析
2016/04/29 Python
python直接访问私有属性的简单方法
2016/07/25 Python
python http接口自动化脚本详解
2018/01/02 Python
python机器学习之贝叶斯分类
2018/03/26 Python
和孩子一起学习python之变量命名规则
2018/05/27 Python
Python基于多线程实现抓取数据存入数据库的方法
2018/06/22 Python
Python 字符串转换为整形和浮点类型的方法
2018/07/17 Python
Django uwsgi Nginx 的生产环境部署详解
2019/02/02 Python
Python面向对象程序设计构造函数和析构函数用法分析
2019/04/12 Python
Python实现栈和队列的简单操作方法示例
2019/11/29 Python
Django 项目通过加载不同env文件来区分不同环境
2020/02/17 Python
校本教研工作方案
2014/01/14 职场文书
幼儿园家长反馈意见
2015/06/03 职场文书
导游词之阆中古城
2019/12/23 职场文书
Redis 中使用 list,streams,pub/sub 几种方式实现消息队列的问题
2022/03/16 Redis
MySQL RC事务隔离的实现
2022/03/31 MySQL