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原理之Session Gc的一个小概率Notice
Apr 12 PHP
php中XMLHttpRequest(Ajax)不能设置自定义的Referer的解决方法
Nov 26 PHP
php 函数中使用static的说明
Jun 01 PHP
PHP 查找字符串常用函数介绍
Jun 07 PHP
探讨各种PHP字符串函数的总结分析
Jun 05 PHP
php实现建立多层级目录的方法
Jul 19 PHP
php使用ZipArchive函数实现文件的压缩与解压缩
Oct 27 PHP
PHP文件缓存smarty模板应用实例分析
Feb 26 PHP
php curl 模拟登录并获取数据实例详解
Dec 22 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
Jul 22 PHP
详解PHP PDO简单教程
May 28 PHP
php中文语义分析实现方法示例
Sep 28 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
yepnope.js 异步加载资源文件
2011/09/08 Javascript
javascript操作select元素实例分析
2015/03/27 Javascript
js实现非常棒的弹出div
2016/10/06 Javascript
javascript 判断是否是微信浏览器的方法
2016/10/09 Javascript
微信小程序实现全国机场索引列表
2018/01/31 Javascript
Vue实现美团app的影院推荐选座功能【推荐】
2018/08/29 Javascript
解决vue路由后界面没有变化,但是链接有的问题
2018/09/01 Javascript
JS简单判断是否在微信浏览器打开的方法示例
2019/01/08 Javascript
JavaScript高阶教程之“==”隐藏下的类型转换
2019/04/11 Javascript
使用vue-cli3 创建vue项目并配置VS Code 自动代码格式化 vue语法高亮问题
2019/05/14 Javascript
layui 阻止图片上传的实例(before方法)
2019/09/26 Javascript
微信小程序国际化探索实现(附源码地址)
2020/05/20 Javascript
[00:32]2018DOTA2亚洲邀请赛OpTic出场
2018/04/03 DOTA
跟老齐学Python之玩转字符串(2)
2014/09/14 Python
python中pycurl库的用法实例
2014/09/30 Python
分享6个隐藏的python功能
2017/12/07 Python
Django Web开发中django-debug-toolbar的配置以及使用
2018/05/06 Python
使用Python3内置文档高效学习以及官方中文文档
2019/05/19 Python
Python发展史及网络爬虫
2019/06/19 Python
树莓派与PC端在局域网内运用python实现即时通讯
2019/06/22 Python
python 画3维轨迹图并进行比较的实例
2019/12/06 Python
Python pip安装模块提示错误解决方案
2020/05/22 Python
DataFrame 数据合并实现(merge,join,concat)
2020/06/14 Python
HTML5 Canvas 旋转风车绘制
2017/08/18 HTML / CSS
Jogun Shop中文官网:韩国知名时尚男装网站
2016/10/12 全球购物
Nike挪威官网:Nike.com (NO)
2018/11/26 全球购物
班队活动设计方案
2014/01/30 职场文书
运动会通讯稿300字
2014/02/02 职场文书
结婚喜宴主持词
2014/03/14 职场文书
党性教育心得体会
2014/09/03 职场文书
校园广播稿100字
2014/10/06 职场文书
党员学习新党章思想汇报
2014/10/25 职场文书
电影焦裕禄观后感
2015/06/09 职场文书
清洁工工作总结
2015/08/11 职场文书
CSS的class与id常用的命名规则
2021/05/18 HTML / CSS
java如何实现获取客户端ip地址的示例代码
2022/04/07 Java/Android