This question already has an answer here:
-
PHP Constants Containing Arrays?
20 answers
I am trying to declare a constant for our office names of each country with associative array.
My declaring code is as below:
define( "OUR_OFFICE", [
"Japan" => "Tokyo Shibuya Office",
"Taiwan" => "Taipei Shilin Office",
"Korea" => "Seoul Yongsan Office",
"Singapore" => "Singapore Novena Office",
"Australia" => "Sydney Darlinghurst Office"
]);
However, it just shows message:
Warning: Constants may only evaluate to scalar values
Is it possible to declare a constant with associative array?
Thank you very much!!!
The code you posted doesn't work on PHP 5.
Declaring constant arrays using define
is a new feature introduced in PHP 7.0.
Since PHP 5.6 it is possible to define a constant array using the const
keyword:
const OUR_OFFICE = [
"Japan" => "Tokyo Shibuya Office",
"Taiwan" => "Taipei Shilin Office",
"Korea" => "Seoul Yongsan Office",
"Singapore" => "Singapore Novena Office",
"Australia" => "Sydney Darlinghurst Office",
];
The documentation highlights the differences between define()
and const
:
As opposed to defining constants using define()
, constants defined using the const
keyword must be declared at the top-level scope because they are defined at compile-time. This means that they cannot be declared inside functions, loops, if statements or try
/catch
blocks.
In PHP 7, array values are also accepted.
But prior PHP 7, you maybe can do this, to pass an array elsewhere using define:
$array = [
"Japan" => "Tokyo Shibuya Office",
"Taiwan" => "Taipei Shilin Office",
"Korea" => "Seoul Yongsan Office",
"Singapore" => "Singapore Novena Office",
"Australia" => "Sydney Darlinghurst Office"
];
$define_array = serialize($array);
define( "OUROFFICE", $define_array );
$our_office = unserialize(OUROFFICE);
print_r($our_office);