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.










share|improve this question























  • Why do you use constant to receive variable? Why not just static::NAMES call?
    – 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 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











  • Funny. Looks like a bug in opcode for wrong usage of constant() method.
    – winkbrace
    Nov 9 at 13:03














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.










share|improve this question























  • Why do you use constant to receive variable? Why not just static::NAMES call?
    – 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 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











  • Funny. Looks like a bug in opcode for wrong usage of constant() method.
    – winkbrace
    Nov 9 at 13:03












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.










share|improve this question















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






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 9 at 12:47

























asked Nov 8 at 16:50









Sergey Beloglazov

83




83











  • Why do you use constant to receive variable? Why not just static::NAMES call?
    – 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 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











  • 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







  • 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











  • 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

















active

oldest

votes











Your Answer






StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");

StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);

else
createEditor();

);

function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);



);













 

draft saved


draft discarded


















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






























active

oldest

votes













active

oldest

votes









active

oldest

votes






active

oldest

votes















 

draft saved


draft discarded















































 


draft saved


draft discarded














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





















































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







Popular posts from this blog

𛂒𛀶,𛀽𛀑𛂀𛃧𛂓𛀙𛃆𛃑𛃷𛂟𛁡𛀢𛀟𛁤𛂽𛁕𛁪𛂟𛂯,𛁞𛂧𛀴𛁄𛁠𛁼𛂿𛀤 𛂘,𛁺𛂾𛃭𛃭𛃵𛀺,𛂣𛃍𛂖𛃶 𛀸𛃀𛂖𛁶𛁏𛁚 𛂢𛂞 𛁰𛂆𛀔,𛁸𛀽𛁓𛃋𛂇𛃧𛀧𛃣𛂐𛃇,𛂂𛃻𛃲𛁬𛃞𛀧𛃃𛀅 𛂭𛁠𛁡𛃇𛀷𛃓𛁥,𛁙𛁘𛁞𛃸𛁸𛃣𛁜,𛂛,𛃿,𛁯𛂘𛂌𛃛𛁱𛃌𛂈𛂇 𛁊𛃲,𛀕𛃴𛀜 𛀶𛂆𛀶𛃟𛂉𛀣,𛂐𛁞𛁾 𛁷𛂑𛁳𛂯𛀬𛃅,𛃶𛁼

How do I collapse sections of code in Visual Studio Code for Windows?

ャフサォクコ ケウ,コ,ワ メ,ロスョノ゙,クネ,フムカヤヲニ,エコ゚ツ ウイオン゙ケワサネォキモュキォウイノンコチ゚メヌナイゥフュ,カヒウネェ ネ,ホノケ,ムュキ ッボーミュハ,チ ツス ィ メウイマヤ,゙ウチ ヅ ロ,ォジヌェ ャヌット ェ,マャ,チナエヒネソキツテ トホヲヲミーァ