PHP 5.4的简化字符串偏移读数

web*_*com 10 php arrayaccess

正如你们许多人所知,PHP 5.4 alpha已经发布.我对以下问题有疑问.

简化的字符串偏移读数. $str[1][0]现在是一个法律结构.

$str[1][0]工作究竟如何?

编辑: http ://php.net/releases/NEWS_5_4_0_alpha1.txt

Nik*_*kiC 11

它只是意味着当读取字符串时,PHP会再次返回一个字符串,您可以再次访问该字符串.(并在那个访问另一个偏移.它变得有趣$str[0][0][0][0][0][0])

在PHP 5.4之前,您将得到"不能将字符串偏移用作数组"错误.


Phi*_*son 7

这是副作用,并在此处的提案中提到:http: //php.markmail.org/thread/yiujwve6zdw37tpv

该功能是字符串偏移的速度/优化.

嗨,

最近我注意到,字符串偏移的读取分两步进行.首先,在zend_fetch_dimension_address_read()中创建temporary_variable的特殊string_offset变体,然后在_get_zval_ptr_var_string_offset()中创建实际字符串值.

我想我们可以创建真正的字符串.这使得字符串偏移读取操作的速度提高了50%,并且允许消除VM中的一些检查和条件性早午餐.

附加补丁(不要忘记重新生成zend_vm_execute.h来测试它).然而,它改变了一个虚假案件中的行为.以下代码现在将发出"b"(当前它会生成致命错误 - 不能将字符串偏移用作数组).

$str = "abs";
var_dump($str[1][0]);
Run Code Online (Sandbox Code Playgroud)

我认为这根本不是问题."b"是有道理的,因为"abs"[1] - >"b"和"b"[0] - >"b".

我会在没有异议的情况下提交补丁.

谢谢.梅德.