Constant array value as array index don't work in foreach
up vote
1
down vote
favorite
I define a class field as array constant.
Then I try to use that array field values as an index in another array:
class A
const NAMES = Array(
"A",
);
static function run()
$arr = array("A"=>"123");
$arNames = constant('self::NAMES');
foreach ($arNames as $name)
echo '$name=' . $name . '<BR>';
echo '$arr[$name]=' . $arr[$name] . '<BR>';
$name2=$arNames[0];
echo '<BR>'.'$name2=' . $name2 . '<BR>';
echo '$arr[$name2]=' . $arr[$name2] . '<BR>';
A::run();
On one server under PHP 7.1.23 it works fine and output is :
$name=A
$arr[$name]=123
$name2=A
$arr[$name2]=123
But it works wrong on another server whith the same PHP, libs and so on. It sets the $arr[$name] to the NULL in the foreach loop. But the direct request by numeric index also works fine:
$name=A
$arr[$name]=
$name2=A
$arr[$name2]=123
Is there any restriction for using constant arrays?
I didn't find anything on http://php.net/manual/ru/language.constants.syntax.php or elsewere.
Addition
Now I find out the difference between severs. If opcode is enabled, the loop blok works wrong.
php arrays class constants
add a comment |
up vote
1
down vote
favorite
I define a class field as array constant.
Then I try to use that array field values as an index in another array:
class A
const NAMES = Array(
"A",
);
static function run()
$arr = array("A"=>"123");
$arNames = constant('self::NAMES');
foreach ($arNames as $name)
echo '$name=' . $name . '<BR>';
echo '$arr[$name]=' . $arr[$name] . '<BR>';
$name2=$arNames[0];
echo '<BR>'.'$name2=' . $name2 . '<BR>';
echo '$arr[$name2]=' . $arr[$name2] . '<BR>';
A::run();
On one server under PHP 7.1.23 it works fine and output is :
$name=A
$arr[$name]=123
$name2=A
$arr[$name2]=123
But it works wrong on another server whith the same PHP, libs and so on. It sets the $arr[$name] to the NULL in the foreach loop. But the direct request by numeric index also works fine:
$name=A
$arr[$name]=
$name2=A
$arr[$name2]=123
Is there any restriction for using constant arrays?
I didn't find anything on http://php.net/manual/ru/language.constants.syntax.php or elsewere.
Addition
Now I find out the difference between severs. If opcode is enabled, the loop blok works wrong.
php arrays class constants
Why do you useconstantto receive variable? Why not juststatic::NAMEScall?
– user1597430
Nov 8 at 16:58
1
Theres no difference between recent PHP Versions atleast (as can be seen here 3v4l.org/9LAI0). Enable proper error reporting on the server where it doesn't work and perform adiffon the two files to check for differences.
– Xatenev
Nov 8 at 16:58
That's not my code. I don't know why they used this. I have only migrate the site to PHP 7.1 and discover this mistake on work server. It works fine on test server. My question is about PHP itself, why sometimes it works wrong. Now I find out the difference between severs. If opcode is enabled, the loop blok works wrong.
– Sergey Beloglazov
Nov 9 at 12:43
Funny. Looks like a bug in opcode for wrong usage of constant() method.
– winkbrace
Nov 9 at 13:03
add a comment |
up vote
1
down vote
favorite
up vote
1
down vote
favorite
I define a class field as array constant.
Then I try to use that array field values as an index in another array:
class A
const NAMES = Array(
"A",
);
static function run()
$arr = array("A"=>"123");
$arNames = constant('self::NAMES');
foreach ($arNames as $name)
echo '$name=' . $name . '<BR>';
echo '$arr[$name]=' . $arr[$name] . '<BR>';
$name2=$arNames[0];
echo '<BR>'.'$name2=' . $name2 . '<BR>';
echo '$arr[$name2]=' . $arr[$name2] . '<BR>';
A::run();
On one server under PHP 7.1.23 it works fine and output is :
$name=A
$arr[$name]=123
$name2=A
$arr[$name2]=123
But it works wrong on another server whith the same PHP, libs and so on. It sets the $arr[$name] to the NULL in the foreach loop. But the direct request by numeric index also works fine:
$name=A
$arr[$name]=
$name2=A
$arr[$name2]=123
Is there any restriction for using constant arrays?
I didn't find anything on http://php.net/manual/ru/language.constants.syntax.php or elsewere.
Addition
Now I find out the difference between severs. If opcode is enabled, the loop blok works wrong.
php arrays class constants
I define a class field as array constant.
Then I try to use that array field values as an index in another array:
class A
const NAMES = Array(
"A",
);
static function run()
$arr = array("A"=>"123");
$arNames = constant('self::NAMES');
foreach ($arNames as $name)
echo '$name=' . $name . '<BR>';
echo '$arr[$name]=' . $arr[$name] . '<BR>';
$name2=$arNames[0];
echo '<BR>'.'$name2=' . $name2 . '<BR>';
echo '$arr[$name2]=' . $arr[$name2] . '<BR>';
A::run();
On one server under PHP 7.1.23 it works fine and output is :
$name=A
$arr[$name]=123
$name2=A
$arr[$name2]=123
But it works wrong on another server whith the same PHP, libs and so on. It sets the $arr[$name] to the NULL in the foreach loop. But the direct request by numeric index also works fine:
$name=A
$arr[$name]=
$name2=A
$arr[$name2]=123
Is there any restriction for using constant arrays?
I didn't find anything on http://php.net/manual/ru/language.constants.syntax.php or elsewere.
Addition
Now I find out the difference between severs. If opcode is enabled, the loop blok works wrong.
php arrays class constants
php arrays class constants
edited Nov 9 at 12:47
asked Nov 8 at 16:50
Sergey Beloglazov
83
83
Why do you useconstantto receive variable? Why not juststatic::NAMEScall?
– user1597430
Nov 8 at 16:58
1
Theres no difference between recent PHP Versions atleast (as can be seen here 3v4l.org/9LAI0). Enable proper error reporting on the server where it doesn't work and perform adiffon the two files to check for differences.
– Xatenev
Nov 8 at 16:58
That's not my code. I don't know why they used this. I have only migrate the site to PHP 7.1 and discover this mistake on work server. It works fine on test server. My question is about PHP itself, why sometimes it works wrong. Now I find out the difference between severs. If opcode is enabled, the loop blok works wrong.
– Sergey Beloglazov
Nov 9 at 12:43
Funny. Looks like a bug in opcode for wrong usage of constant() method.
– winkbrace
Nov 9 at 13:03
add a comment |
Why do you useconstantto receive variable? Why not juststatic::NAMEScall?
– user1597430
Nov 8 at 16:58
1
Theres no difference between recent PHP Versions atleast (as can be seen here 3v4l.org/9LAI0). Enable proper error reporting on the server where it doesn't work and perform adiffon the two files to check for differences.
– Xatenev
Nov 8 at 16:58
That's not my code. I don't know why they used this. I have only migrate the site to PHP 7.1 and discover this mistake on work server. It works fine on test server. My question is about PHP itself, why sometimes it works wrong. Now I find out the difference between severs. If opcode is enabled, the loop blok works wrong.
– Sergey Beloglazov
Nov 9 at 12:43
Funny. Looks like a bug in opcode for wrong usage of constant() method.
– winkbrace
Nov 9 at 13:03
Why do you use
constant to receive variable? Why not just static::NAMES call?– user1597430
Nov 8 at 16:58
Why do you use
constant to receive variable? Why not just static::NAMES call?– user1597430
Nov 8 at 16:58
1
1
Theres no difference between recent PHP Versions atleast (as can be seen here 3v4l.org/9LAI0). Enable proper error reporting on the server where it doesn't work and perform a
diff on the two files to check for differences.– Xatenev
Nov 8 at 16:58
Theres no difference between recent PHP Versions atleast (as can be seen here 3v4l.org/9LAI0). Enable proper error reporting on the server where it doesn't work and perform a
diff on the two files to check for differences.– Xatenev
Nov 8 at 16:58
That's not my code. I don't know why they used this. I have only migrate the site to PHP 7.1 and discover this mistake on work server. It works fine on test server. My question is about PHP itself, why sometimes it works wrong. Now I find out the difference between severs. If opcode is enabled, the loop blok works wrong.
– Sergey Beloglazov
Nov 9 at 12:43
That's not my code. I don't know why they used this. I have only migrate the site to PHP 7.1 and discover this mistake on work server. It works fine on test server. My question is about PHP itself, why sometimes it works wrong. Now I find out the difference between severs. If opcode is enabled, the loop blok works wrong.
– Sergey Beloglazov
Nov 9 at 12:43
Funny. Looks like a bug in opcode for wrong usage of constant() method.
– winkbrace
Nov 9 at 13:03
Funny. Looks like a bug in opcode for wrong usage of constant() method.
– winkbrace
Nov 9 at 13:03
add a comment |
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53212462%2fconstant-array-value-as-array-index-dont-work-in-foreach%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Why do you use
constantto receive variable? Why not juststatic::NAMEScall?– user1597430
Nov 8 at 16:58
1
Theres no difference between recent PHP Versions atleast (as can be seen here 3v4l.org/9LAI0). Enable proper error reporting on the server where it doesn't work and perform a
diffon the two files to check for differences.– Xatenev
Nov 8 at 16:58
That's not my code. I don't know why they used this. I have only migrate the site to PHP 7.1 and discover this mistake on work server. It works fine on test server. My question is about PHP itself, why sometimes it works wrong. Now I find out the difference between severs. If opcode is enabled, the loop blok works wrong.
– Sergey Beloglazov
Nov 9 at 12:43
Funny. Looks like a bug in opcode for wrong usage of constant() method.
– winkbrace
Nov 9 at 13:03