Is It Possible to Declare Constant with Associativ

2019-06-11 08:04发布

This question already has an answer here:

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!!!

2条回答
趁早两清
2楼-- · 2019-06-11 08:49

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.

查看更多
Juvenile、少年°
3楼-- · 2019-06-11 08:50

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);
查看更多
登录 后发表回答