正如你们许多人所知,PHP 5.4 alpha已经发布.我对以下问题有疑问.
简化的字符串偏移读数.
$str[1][0]现在是一个法律结构.
$str[1][0]工作究竟如何?
Nik*_*kiC 11
它只是意味着当读取字符串时,PHP会再次返回一个字符串,您可以再次访问该字符串.(并在那个访问另一个偏移.它变得有趣$str[0][0][0][0][0][0])
在PHP 5.4之前,您将得到"不能将字符串偏移用作数组"错误.
这是副作用,并在此处的提案中提到: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"(当前它会生成致命错误 - 不能将字符串偏移用作数组).
Run Code Online (Sandbox Code Playgroud)$str = "abs"; var_dump($str[1][0]);我认为这根本不是问题."b"是有道理的,因为"abs"[1] - >"b"和"b"[0] - >"b".
我会在没有异议的情况下提交补丁.
谢谢.梅德.