|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2019-09-08 18:51 UTC] tandre@php.net
Description:
------------
compact('0') (or any other number) will generate an array with inaccessible keys if a variable with that value is defined.
I can't think of any reason to actually do this in real code, but I'd also expect all functions to return arrays with accessible keys.
Note that ext/opcache/Optimizer/zend_func_info.c may need to be changed depending on how this is fixed, to add MAY_BE_ARRAY_KEY_LONG.
F1("compact", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
I'd suggest limiting the fix to development php versions(php 7.4/8.0).
https://bugs.php.net/bug.php?id=61655 was a similar issue with inaccessible array keys, but had a different cause (casting object to array)
Test script:
---------------
<?php
call_user_func(function () {
${0} = 'value';
$result = compact('0');
var_export($result);
var_export($result[0]);
});
Expected result:
----------------
Should emit the following output, with an integer array key (0, not '0') that can be accessed.
array(
0 => 'value'
)'value'
Alternatively, it could throw/return an error value.
Actual result:
--------------
php test.php
array (
'0' => 'value',
)Notice: Undefined offset: 0 in /home/tyson/test.php on line 6
NULL
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sat Oct 25 14:00:01 2025 UTC |
There's a larger underlying issue here: ${0} = 'value'; var_dump($GLOBALS[0]); // Notice: Undefined offset: 0 Only works on HHVM an PHP < 5.0. Same for the other way around: $GLOBALS[0] = 'value'; var_dump(${0}); // Notice: Undefined variable: 0