php5.4出现PHP Warning: Illegal string offset的解决办法

PHP 林涛 9557℃ 0评论

其实鸟哥(Laruence)在他的博客中(http://www.laruence.com/2011/12/19/2409.html)很早就说明了,这里应用鸟哥的博文在说一下。

错误得地方对应的php代码为:

&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
	$sql = &amp;amp;quot;select repayment_time,repayment_account from `{borrow_repayment}` where status !=1 and borrow_id in (select id from `{borrow}` where user_id = {$user_id} and status=3) order by repayment_time &amp;amp;quot;;&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
	$result = $mysql-&amp;amp;gt;db_fetch_array($sql);&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
	$_result['new_repay_time'] = $result['repayment_time'];&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
	$_result['new_repay_account'] = $result['repayment_account'];&lt;br /&gt;<br />
	&amp;lt;/p&amp;gt;<br />
	&lt;/p&gt;
</p>

<p>
	&lt;p&gt;<br />
	&amp;lt;p&amp;gt;&lt;br /&gt;<br />
	

但是根据sql查询的结果为空,此时 $result[‘repayment_time’] 和 $result[‘repayment_account’] 都是不存在的;所以应该写成如下:

&lt;br /&gt;<br />
	&amp;lt;/p&amp;gt;<br />
	&lt;/p&gt;
</p>

<p>
	&lt;p&gt;<br />
	&amp;lt;p&amp;gt;&lt;br /&gt;<br />
	$sql = &amp;amp;quot;select repayment_time,repayment_account from `{borrow_repayment}` where status !=1 and borrow_id in (select id from `{borrow}` where user_id = {$user_id} and status=3) order by repayment_time &amp;amp;quot;;&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
	$result = $mysql-&amp;amp;gt;db_fetch_array($sql);&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
	$_result['new_repay_time'] = isset($result['repayment_time'])?$result['repayment_time']:&amp;amp;quot;&amp;amp;quot;;&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
	$_result['new_repay_account'] = isset($result['repayment_account'])?$result['repayment_account']:&amp;amp;quot;&amp;amp;quot;;&lt;br /&gt;<br />
	&amp;lt;/p&amp;gt;<br />
	&lt;/p&gt;
</p>

<p>
	&lt;p&gt;<br />
	&amp;lt;p&amp;gt;&lt;br /&gt;<br />
	&amp;lt;span style=&amp;quot;line-height: 1.6em;&amp;quot;&amp;gt;

这也是php4和php2不同的地方。鸟哥的说法更严谨:

具体的改变是, 对于一个变量$a, 如果$a是一个字符串, 那么, 对于非数字型索引, 比如$a[“foo”], 在isset的时候将返回false, empty返回true, 但是为了兼容已有的代码, 当你获取这个值的时候, 还是会返回$a[0], 不过会额外抛出一个警告信息. 比如:

&amp;lt;/span&amp;gt;&lt;br /&gt;<br />
	&amp;lt;/p&amp;gt;&lt;/span&gt;<br />
	&lt;/p&gt;</span>
</p>

<p>
	&lt;p&gt;<br />
	&amp;lt;p&amp;gt;&lt;br /&gt;<br />
	&amp;amp;lt;?php&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
	$a = &amp;amp;quot;laruence&amp;amp;quot;;&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
	var_dump($a["foo"]) ; //PHP Warning: &amp;amp;nbsp;Illegal string offset &amp;amp;#39;foo&amp;amp;#39;&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
	//output string(1) &amp;amp;quot;l&amp;amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
	&amp;amp;nbsp;&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
	var_dump(isset($a["foo"]));&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
	//false&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
	&amp;amp;nbsp;&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
	var_dump(&lt;br /&gt;<br />
	&amp;lt;/p&amp;gt;<br />
	&lt;/p&gt;
</p>

<p>
	&lt;p&gt;<br />
	&amp;lt;p&amp;gt;&lt;br /&gt;<br />
	&amp;lt;span class=&amp;quot;sh_symbol&amp;quot; style=&amp;quot;margin: 0px; padding: 0px; border: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&amp;quot;&amp;gt;

而对于键值是bool, double, null的情况, 将会和以前保持一致, 不过会抛出一个Notice信息.

  1. &amp;lt;/span&amp;gt;&lt;br /&gt;<br />
    		&amp;lt;/li&amp;gt;&lt;br /&gt;<br />
    		&amp;lt;li style=&amp;quot;margin: 0px; padding: 0px; border: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&amp;quot;&amp;gt;&lt;br /&gt;<br />
    		​&amp;amp;lt;?php&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
    		$a = &amp;amp;quot;bar&amp;amp;quot;;&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
    		echo $a[TRUE]; &amp;amp;nbsp;//PHP Notice: &amp;amp;nbsp;String offset cast occured&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
    		//output a&lt;br /&gt;<br />
    		&amp;lt;/li&amp;gt;&lt;br /&gt;<br />
    		&amp;lt;li style=&amp;quot;margin: 0px; padding: 0px; border: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&amp;quot;&amp;gt;&lt;br /&gt;<br />
    		&amp;lt;span class=&amp;quot;sh_symbol&amp;quot; style=&amp;quot;margin: 0px; padding: 0px; border: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&amp;quot;&amp;gt;

而对于数字型的字符串索引, 比如”1″, “12″等, 和以前保持一致.

如需转载请注明: 转载自26点的博客

本文链接地址: php5.4出现PHP Warning: Illegal string offset的解决办法

转载请注明:26点的博客 » php5.4出现PHP Warning: Illegal string offset的解决办法

喜欢 (0)
发表我的评论
取消评论

表情
(1)个小伙伴在吐槽
  1. 写的不错了,多谢分享啦。欢迎回访
    成都合原动力2014-04-09 15:41 回复