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实现MVC开发得最简单的方法――模型
Apr 10 PHP
php中的注释、变量、数组、常量、函数应用介绍
Nov 16 PHP
PHP无限分类(树形类)
Sep 28 PHP
php实现按文件名搜索文件的远程文件查找器
May 10 PHP
codeigniter数据库操作函数汇总
Jun 12 PHP
浅析PHP文件下载原理
Dec 25 PHP
php获取远程文件的内容和大小
Nov 03 PHP
php实现的xml操作类
Jan 15 PHP
php 自定义错误日志实例详解
Nov 12 PHP
PHP实现的简单适配器模式示例
Jun 22 PHP
基于laravel Request的所有方法详解
Sep 29 PHP
微信小程序和php的登录实现
Apr 01 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
全国FM电台频率大全 - 17 湖北省
2020/03/11 无线电
解析func_num_args与func_get_args函数的使用
2013/06/24 PHP
简单实用的网站PHP缓存类实例
2014/07/18 PHP
php实现上传图片文件代码
2015/07/19 PHP
PHP数组实际占用内存大小原理解析
2020/12/11 PHP
Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式
2010/06/28 Javascript
jquery ajax学习笔记2 使用XMLHttpRequest对象的responseXML
2011/10/16 Javascript
JS自定义功能函数实现动态添加网址参数修改网址参数值
2013/08/02 Javascript
判断一个变量是数组Array类型的方法
2013/09/16 Javascript
js取整数、取余数的方法
2014/05/11 Javascript
For循环中分号隔开的3部分的执行顺序探讨
2014/05/27 Javascript
Javascript中的匿名函数与封装介绍
2015/03/15 Javascript
Javascript中String的常用方法实例分析
2015/06/13 Javascript
如何根据百度地图计算出两地之间的驾驶距离(两种语言js和C#)
2015/10/29 Javascript
jQuery自定义滚动条完整实例
2016/01/08 Javascript
JS与Ajax Get和Post在使用上的区别实例详解
2016/06/08 Javascript
jQuery+CSS3实现仿花瓣网固定顶部位置带悬浮效果的导航菜单
2016/09/21 Javascript
整理关于Bootstrap警示框的慕课笔记
2017/03/29 Javascript
Nodejs 发布自己的npm包并制作成命令行工具的实例讲解
2018/05/15 NodeJs
Vue 实现从文件中获取文本信息的方法详解
2019/10/16 Javascript
echarts实现折线图的拖拽效果
2019/12/19 Javascript
js实现车辆管理系统
2020/08/26 Javascript
vue实现顶部菜单栏
2020/11/08 Javascript
Python脚本实现12306火车票查询系统
2016/09/30 Python
Python实现的多线程http压力测试代码
2017/02/08 Python
Python numpy 提取矩阵的某一行或某一列的实例
2018/04/03 Python
Python 实现一行输入多个值的方法
2018/04/21 Python
django 快速启动数据库客户端程序的方法示例
2019/08/16 Python
python函数声明和调用定义及原理详解
2019/12/02 Python
25个CSS3动画按钮和菜单教程分享
2012/10/03 HTML / CSS
香港礼品网站:GiftU eshop
2017/09/01 全球购物
会计助理岗位职责
2014/02/17 职场文书
士力架广告词
2014/03/20 职场文书
幼儿园大班开学寄语(2015秋季)
2015/05/27 职场文书
网络安全倡议书(3篇)
2019/09/18 职场文书
Mysql分析设计表主键为何不用uuid
2022/03/31 MySQL