Nice programing

배열을 상수로 선언 할 수 있습니까?

nicepro 2020. 12. 27. 20:45
반응형

배열을 상수로 선언 할 수 있습니까?


이 질문에 이미 답변이 있습니다.

다음과 같은 상수를 정의 할 수 있습니다.

define("aconstant','avalue');

아래와 같은 방식으로 배열을 정의 할 수 없습니까?

define("months",array("January", "February", ---); 

업데이트 : 이것은 PHP 7에서 가능합니다 ( 참조 )

// Works as of PHP 7
define('ANIMALS', array(
    'dog',
    'cat',
    'bird'
));
echo ANIMALS[1]; // outputs "cat"

원래 답변

php.net에서 ...

상수의 값. 단지 스칼라와 null 값이 허용됩니다 . 스칼라 값은 정수, 부동 소수점, 문자열 또는 부울 값입니다. 자원 상수를 정의 할 수 있지만 권장되지 않으며 예상치 못한 동작을 유발할 수 있습니다.

$months = array("January,"February",...) 괜찮을 것입니다.


PHP 5.6부터 ( nikic을 통해 ) 해당 목적으로 const사용할 수 있습니다 .

const months = ["January", "February"];
var_dump("January" === months[0]);

해킹으로 상수 내부에 배열을 넣을 수 있습니다.

define('MONTHS', serialize(array('January', 'February' ...)));

하지만 unserialize()필요할 때 일정한 값 을 가져야 하는데이게 그다지 유용하지 않은 것 같습니다.

대안으로 여러 상수를 정의하십시오.

define('MONTH_1', 'January');
define('MONTH_2', 'February');
...

그리고 constant()함수를 사용 하여 값을 찾습니다.

echo constant('MONTH_'.$month);

아니, 할 수 없습니다. 참조 PHP를 : 구문 - 수동

스칼라 데이터 ( 부울, 정수, 부동 소수점문자열 ) 상수에 포함 할 수 있습니다. 상수를 리소스로 정의 할 수 있지만 예기치 않은 결과가 발생할 수 있으므로 피해야합니다.


JSON 형식을 사용하여 배열을 문자열로 유지 한 다음이 문자열을 상수에 할당 할 수 있습니다.

$months = array("January","February","March");
define('MONTHS', json_encode($months));

사용하려는 경우 :

$months = json_decode(MONTHS);

상수가 있어야하는 경우 구분 된 문자열을 사용하고 배열로 분해하는 것은 어떻습니까?

define("MONTHS", "January;February;March");
$months = explode(";",MONTHS);

PHP 5.6 부터 상수 배열을 선언 할 수 있습니다 . 링크 된 문서는 예제를 사용합니다 const ARR = ['a', 'b'];. 당신은 또한 할 수 있습니다 const ARR = array('a', 'b');. 그러나 5.6에는 이상한 점이 있습니다.를 사용하여 상수 배열을 선언 할 수 const있지만 define(). 이것은 PHP 7.0에서 수정되었습니다 .

참조 URL : https://stackoverflow.com/questions/3803349/is-it-possible-to-declare-an-array-as-constant

반응형