<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://jackxiang.com/post//</link>
<title><![CDATA[PHP的empty函数只能判断一个变量是否为空，而不能判断一个字符串（或者其他的值，包括函数返回值）为空。]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Thu, 26 May 2011 09:44:31 +0000</pubDate> 
<guid>http://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	有很长一段时间一直以为empty应该是能够判断一个东西是否为空的，直到有一天我像这样“empty(trim($a))”使用的时候出现了error，然后查手册才知道了原来empty函数只能判断一个变量是否为空，而不能判断一个字符串（或者其他的值，包括函数返回值）为空。虽然知道了这只是一个表层的原因，但是却没有再去了解深层次的原因。 <br/><br/>对于我们做php开发的来说，empty函数（注，其实empty是一个语言结构而非函数，这里说函数只是个人习惯）是再熟悉不过的一个函数了，查PHP的手册描述如下<br/>Determine whether a variable is considered to be empty. <br/>但是在我的记忆中，有很长一段时间一直以为empty应该是能够判断一个东西是否为空的，直到有一天我像这样“empty(trim($a))”使用的时候出现了error，然后查手册才知道了原来empty函数只能判断一个变量是否为空，而不能判断一个字符串（或者其他的值，包括函数返回值）为空。虽然知道了这只是一个表层的原因，但是却没有再去了解深层次的原因。 <br/>最近对php内核产生了兴趣，又再次想起了这个问题，于是按照别人的经验写了以下一段代码： <br/>代码如下:<br/>&lt;?php <br/>echo &quot;&lt;pre&gt;&quot;; <br/>$tokens = token_get_all(&#039;&lt;?php empty(trim($a));?&gt;&#039;); <br/>foreach($tokens as $t)&#123; <br/>if (is_array($t))&#123; <br/>printf(&quot;%s &#92;t %s &#92;n&quot;, token_name($t[0]), htmlspecialchars($t[1])); <br/>&#125;else&#123; <br/>printf(&quot;&#92;t%s&#92;n&quot;, $t); <br/>&#125; <br/>&#125; <br/><br/>结果输出如下：（这个如果不理解就看一下php手册附录的“List of Parser Tokens”那部分吧） <br/>T_OPEN_TAG &lt;?php <br/>T_EMPTY empty <br/>( <br/>T_STRING trim <br/>( <br/>T_VARIABLE $a <br/>) <br/>) <br/><br/>T_CLOSE_TAG ?&gt; <br/>变量对应的token应该是T_VARIABLE，而trim($a)对应的是T_STRING。所以如果直接运行“empty(trim($a));”会导致运行错误： <br/>Fatal error: Can&#039;t use function return value in write context <br/>后来我想直接empty一个字符串会怎么样呢？结果导致的并不是运行错误，而是解析错误： <br/>Parse error: parse error, expecting `T_STRING&#039; or `T_VARIABLE&#039; or `&#039;$&#039;&#039; in ... <br/>（感觉这个错误信息让人。。。） <br/>查看字符串对应的token是T_CONSTANT_ENCAPSED_STRING（字符串语法）。虽然参数对于的token有所不同，但是他们都不是T_VARIABLE，应该在编译的阶段就出现错误才对，为什么。。。 <br/>于是也学着那些高人们查看php的源码来了。。。不过还没读懂相关的代码，呵呵，下次再分享～ <br/>最后重申一次，empty是语言结构，而非函数！ <br/>（和print，echo，include，require，die等等一样都是语言结构，网上某些文章说print有返回值就说是函数是不对的） <br/>详细出处参考： http://www.jb51.net/article/19611.htm&nbsp;&nbsp;里面有Js报错，大家如果愿意去看也行，我是直接拷贝过来的。
]]>
</description>
</item><item>
<link>http://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] PHP的empty函数只能判断一个变量是否为空，而不能判断一个字符串（或者其他的值，包括函数返回值）为空。]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>