php empty函数 使用说明

yipeiwu_com6年前PHP代码库
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生成二维码的几种方式整理及使用实例

1.google开放api 复制代码 代码如下: $urlToEncode="http://bbs.lewanchina.com"; generateQRfromGoogle($u...

php实现数组按拼音顺序排序的方法 原创

本文实例讲述了php实现数组按拼音顺序排序的方法。分享给大家供大家参考,具体如下: 一、问题: 给定数组要求实现按照其汉字首字母排序: $pinyin = array( arra...

PHP+apc+ajax实现的ajax_upload上传进度条代码

PHP+apc+ajax实现的ajax_upload上传进度条代码

本文实例讲述了PHP+apc+ajax实现的ajax_upload上传进度条代码。分享给大家供大家参考,具体如下: 上传进度条是怎么实现的呢?原理是怎么样的呢?当我们浏览...

解决PHP程序运行时:Fatal error: Maximum execution time of 30 seconds exceeded in的错误提示

解决分析: 这个错误是说你的php 执行时间越过了配置文件中设置的最大执行时间30秒钟,这不是你的程序本身存在的问题,而 是系统的配置文件问题,如果你的网速快的话,可能再执行一次就不会出...

php 获得汉字拼音首字母的函数

php获取汉字拼音的第一个字母复制代码 代码如下:<?php function getinitial($str) { $asc=ord(substr($str,0,1)); if...