배열을 포함하는 PHP 상수?
PHP배열을 포함하는 PHP 상수?
실패 :
define('DEFAULT_ROLES', array('guy', 'development team'));
분명히 상수는 배열을 가질 수 없습니다. 이 문제를 해결하는 가장 좋은 방법은 무엇입니까?
define('DEFAULT_ROLES', 'guy|development team');
//...
$default = explode('|', DEFAULT_ROLES);
이것은 불필요한 노력처럼 보입니다.
해결법
-
==============================
1.참고 : 이것은 받아 들인 대답이지만, PHP 5.6 이상에서는 const 배열을 사용할 수 있습니다. 아래의 Andrea Faulds의 대답을 참조하십시오.
참고 : 이것은 받아 들인 대답이지만, PHP 5.6 이상에서는 const 배열을 사용할 수 있습니다. 아래의 Andrea Faulds의 대답을 참조하십시오.
배열을 직렬화 한 다음 상수에 넣을 수도 있습니다.
# define constant, serialize array define ("FRUITS", serialize (array ("apple", "cherry", "banana"))); # use it $my_fruits = unserialize (FRUITS);
-
==============================
2.PHP 5.6 이후로 const로 배열 상수를 선언 할 수 있습니다 :
PHP 5.6 이후로 const로 배열 상수를 선언 할 수 있습니다 :
<?php const DEFAULT_ROLES = array('guy', 'development team');
짧은 구문도 예상대로 작동합니다.
<?php const DEFAULT_ROLES = ['guy', 'development team'];
PHP 7을 사용하고 있다면, 처음 시도한 것처럼 define ()을 사용할 수 있습니다 :
<?php define('DEFAULT_ROLES', array('guy', 'development team'));
-
==============================
3.클래스의 정적 변수로 저장할 수 있습니다.
클래스의 정적 변수로 저장할 수 있습니다.
class Constants { public static $array = array('guy', 'development team'); } # Warning: array can be changed lateron, so this is not a real constant value: Constants::$array[] = 'newValue';
배열이 다른 사람들에 의해 변경 될 수 있다는 생각이 마음에 들지 않으면 getter가 도움이 될 수 있습니다.
class Constants { private static $array = array('guy', 'development team'); public static function getArray() { return self::$array; } } $constantArray = Constants::getArray();
편집하다
PHP5.4부터는 중간 변수가 필요없는 배열 값에 액세스 할 수도 있습니다. 즉, 다음과 같은 작업이 가능합니다.
$x = Constants::getArray()['index'];
-
==============================
4.나는 이것을 이렇게 사용하고있다. 나는 그것이 다른 사람들을 도울 것이라고 희망한다.
나는 이것을 이렇게 사용하고있다. 나는 그것이 다른 사람들을 도울 것이라고 희망한다.
config.php
class app{ private static $options = array( 'app_id' => 'hello', ); public static function config($key){ return self::$options[$key]; } }
파일에서 상수가 필요한 곳.
require('config.php'); print_r(app::config('app_id'));
-
==============================
5.이것이 내가 사용하는 것입니다. soulmerge에서 제공하는 예제와 비슷하지만이 방법을 사용하면 전체 배열 또는 배열의 단일 값을 가져올 수 있습니다.
이것이 내가 사용하는 것입니다. soulmerge에서 제공하는 예제와 비슷하지만이 방법을 사용하면 전체 배열 또는 배열의 단일 값을 가져올 수 있습니다.
class Constants { private static $array = array(0 => 'apple', 1 => 'orange'); public static function getArray($index = false) { return $index !== false ? self::$array[$index] : self::$array; } }
다음과 같이 사용하십시오.
Constants::getArray(); // Full array // OR Constants::getArray(1); // Value of 1 which is 'orange'
-
==============================
6.상수에 JSON 문자열로 저장할 수 있습니다. 또한 애플리케이션 관점에서 볼 때 JSON은 다른 경우에 유용 할 수 있습니다.
상수에 JSON 문자열로 저장할 수 있습니다. 또한 애플리케이션 관점에서 볼 때 JSON은 다른 경우에 유용 할 수 있습니다.
define ("FRUITS", json_encode(array ("apple", "cherry", "banana"))); $fruits = json_decode (FRUITS); var_dump($fruits);
-
==============================
7.PHP 5.6부터 아래처럼 const 키워드를 사용하여 상수 배열을 정의 할 수 있습니다
PHP 5.6부터 아래처럼 const 키워드를 사용하여 상수 배열을 정의 할 수 있습니다
const DEFAULT_ROLES = ['test', 'development', 'team'];
다음과 같이 다른 요소에 액세스 할 수 있습니다.
echo DEFAULT_ROLES[1]; ....
PHP 7부터 상수 배열은 다음과 같이 define을 사용하여 정의 할 수 있습니다.
define('DEFAULT_ROLES', [ 'test', 'development', 'team' ]);
이전과 같은 방식으로 다른 요소에 액세스 할 수 있습니다.
-
==============================
8.나는 그것이 약간 오래된 질문이라는 것을 알고 있지만, 여기에 내 해결책이있다.
나는 그것이 약간 오래된 질문이라는 것을 알고 있지만, 여기에 내 해결책이있다.
<?php class Constant { private $data = []; public function define($constant, $value) { if (!isset($this->data[$constant])) { $this->data[$constant] = $value; } else { trigger_error("Cannot redefine constant $constant", E_USER_WARNING); } } public function __get($constant) { if (isset($this->data[$constant])) { return $this->data[$constant]; } else { trigger_error("Use of undefined constant $constant - assumed '$constant'", E_USER_NOTICE); return $constant; } } public function __set($constant,$value) { $this->define($constant, $value); } } $const = new Constant;
객체와 배열을 상수에 저장해야하기 때문에 PHP를 runkit으로 설치하여 $ const 변수를 전역 변수로 만들 수 있었기 때문에이 함수를 정의했습니다.
$ const-> define ( "my_constant", array ( "my", "values"));로 사용할 수 있습니다. 또는 단지 $ const-> my_constant = array ( "my", "values");
값을 얻으려면 $ const-> my_constant를 호출하면됩니다.
-
==============================
9.폭발 및 함몰 함수를 사용하여 우리는 솔루션을 즉석에서 만들 수 있습니다.
폭발 및 함몰 함수를 사용하여 우리는 솔루션을 즉석에서 만들 수 있습니다.
$array = array('lastname', 'email', 'phone'); define('DEFAULT_ROLES', implode (',' , $array)); echo explode(',' ,DEFAULT_ROLES ) [1];
그러면 이메일이 전송됩니다.
더 많이 최적화하고 싶다면 다음과 같이 반복적 인 일을하는 2 가지 함수를 정의 할 수 있습니다 :
//function to define constant function custom_define ($const , $array) { define($const, implode (',' , $array)); } //function to access constant function return_by_index ($index,$const = DEFAULT_ROLES) { $explodedResult = explode(',' ,$const ) [$index]; if (isset ($explodedResult)) return explode(',' ,$const ) [$index] ; }
희망이 도움이됩니다. 행복한 코딩.
-
==============================
10.ser / deser 또는 encode / decode 트릭의 일종을하는 것은보기 흉한 것처럼 보이고 상수를 사용하려고 할 때 정확히 무엇을했는지 기억해야합니다. 접근자를 가진 클래스 개인 정적 변수는 괜찮은 해결책이라고 생각합니다. 상수 배열의 정의를 반환하는 공용 정적 getter 메서드가 있습니다. 이렇게하려면 최소한의 추가 코드가 필요하며 배열 정의를 실수로 수정할 수 없습니다.
ser / deser 또는 encode / decode 트릭의 일종을하는 것은보기 흉한 것처럼 보이고 상수를 사용하려고 할 때 정확히 무엇을했는지 기억해야합니다. 접근자를 가진 클래스 개인 정적 변수는 괜찮은 해결책이라고 생각합니다. 상수 배열의 정의를 반환하는 공용 정적 getter 메서드가 있습니다. 이렇게하려면 최소한의 추가 코드가 필요하며 배열 정의를 실수로 수정할 수 없습니다.
class UserRoles { public static function getDefaultRoles() { return array('guy', 'development team'); } } initMyRoles( UserRoles::getDefaultRoles() );
정의 된 상수처럼 보이게하려면 모든 대문자를 사용할 수 있지만 이름 뒤에 '()'괄호를 추가하는 것을 기억하는 것은 혼란 스럽습니다.
class UserRoles { public static function DEFAULT_ROLES() { return array('guy', 'development team'); } } //but, then the extra () looks weird... initMyRoles( UserRoles::DEFAULT_ROLES() );
나는 당신이 요구하는 define () 함수에 더 가깝도록 메소드를 전역으로 만들 수 있다고 생각하지만, 어쨌든 상수 이름의 범위를 지정하고 전역을 피하는 것이 좋습니다.
-
==============================
11.이처럼 정의 할 수 있습니다.
이처럼 정의 할 수 있습니다.
define('GENERIC_DOMAIN',json_encode(array( 'gmail.com','gmail.co.in','yahoo.com' ))); $domains = json_decode(GENERIC_DOMAIN); var_dump($domains);
-
==============================
12.예, 배열을 상수로 정의 할 수 있습니다. PHP 5.6부터 상수를 스칼라 표현식으로 정의 할 수 있으며 배열 상수를 정의 할 수도 있습니다. 상수를 자원으로 정의 할 수는 있지만 예상치 못한 결과가 발생할 수 있으므로 피해야합니다.
예, 배열을 상수로 정의 할 수 있습니다. PHP 5.6부터 상수를 스칼라 표현식으로 정의 할 수 있으며 배열 상수를 정의 할 수도 있습니다. 상수를 자원으로 정의 할 수는 있지만 예상치 못한 결과가 발생할 수 있으므로 피해야합니다.
<?php // Works as of PHP 5.3.0 const CONSTANT = 'Hello World'; echo CONSTANT; // Works as of PHP 5.6.0 const ANOTHER_CONST = CONSTANT.'; Goodbye World'; echo ANOTHER_CONST; const ANIMALS = array('dog', 'cat', 'bird'); echo ANIMALS[1]; // outputs "cat" // Works as of PHP 7 define('ANIMALS', array( 'dog', 'cat', 'bird' )); echo ANIMALS[1]; // outputs "cat" ?>
이 링크의 참조
행복한 코딩을하십시오.
-
==============================
13.상수는 스칼라 값만 포함 할 수 있습니다. 배열의 직렬화 (또는 JSON으로 인코딩 된 표현)를 저장하는 것이 좋습니다.
상수는 스칼라 값만 포함 할 수 있습니다. 배열의 직렬화 (또는 JSON으로 인코딩 된 표현)를 저장하는 것이 좋습니다.
-
==============================
14.예를 들어 클래스에서 Associative Arrays ..와 같이 작업 할 수 있습니다.
예를 들어 클래스에서 Associative Arrays ..와 같이 작업 할 수 있습니다.
class Test { const CAN = [ "can bark", "can meow", "can fly" ], ANIMALS = [ self::CAN[0] => "dog", self::CAN[1] => "cat", self::CAN[2] => "bird" ]; static function noParameter() { return self::ANIMALS[self::CAN[0]]; } static function withParameter($which, $animal) { return "who {$which}? a {$animal}."; } } echo Test::noParameter() . "s " . Test::CAN[0] . ".<br>"; echo Test::withParameter( array_keys(Test::ANIMALS)[2], Test::ANIMALS["can fly"] ); // dogs can bark. // who can fly? a bird.
-
==============================
15.저는 eyze에 동의합니다. 상수는 응용 프로그램의 전체 수명에 필요한 단일 값 값인 경향이 있습니다. 이런 종류의 일에 대해 상수 대신 구성 파일을 사용하는 것에 대해 생각할 수도 있습니다.
저는 eyze에 동의합니다. 상수는 응용 프로그램의 전체 수명에 필요한 단일 값 값인 경향이 있습니다. 이런 종류의 일에 대해 상수 대신 구성 파일을 사용하는 것에 대해 생각할 수도 있습니다.
상수 배열이 정말로 필요한 경우에는 명명 규칙을 사용하여 배열을 다소 모방 할 수 있습니다 (예 : DB_Name, DB_USER, DB_HOST 등).
-
==============================
16.PHP 7에서 define () 함수를 사용하여 상수 배열을 정의 할 수 있습니다 :
PHP 7에서 define () 함수를 사용하여 상수 배열을 정의 할 수 있습니다 :
define('ANIMALS', [ 'dog', 'cat', 'bird' ]); echo ANIMALS[1]; // outputs "cat"
-
==============================
17.
define('MY_ARRAY_CONSTANT_DELIMETER', '|'); define('MY_ARRAY',implode(MY_ARRAY_CONSTANT_DELIMETER,array(1,2,3,4))); //retrieving the array $my_array = explode(MY_ARRAY_CONSTANT_DELIMETER, MY_ARRAY);
-
==============================
18.배열을 일련의 상수로 분해 할 수도 있습니다. (꽤 오래된 학교 솔루션) 어쨌든 배열은 상수이기 때문에 필요로하는 유일한 이유는 전역적이고 빠르며 특정 키를 조회하는 것입니다.
배열을 일련의 상수로 분해 할 수도 있습니다. (꽤 오래된 학교 솔루션) 어쨌든 배열은 상수이기 때문에 필요로하는 유일한 이유는 전역적이고 빠르며 특정 키를 조회하는 것입니다.
그러므로 이것 :
define('DEFAULT_ROLES', array('guy', 'development team'));
다음으로 바뀔 것입니다 :
define('DEFAULT_ROLES_0', 'guy'); define('DEFAULT_ROLES_1', 'development team');
예, 네임 스페이스 오염 (그리고 그것을 막기위한 접두사가 많이 있습니다)이 고려되었습니다.
-
==============================
19.그건 맞습니다, 당신은 상수에 대한 배열을 사용할 수 없으며 scaler와 null 만 사용할 수 있습니다. 상수에 대한 배열을 사용한다는 생각은 나에게 조금 뒤떨어져 보입니다.
그건 맞습니다, 당신은 상수에 대한 배열을 사용할 수 없으며 scaler와 null 만 사용할 수 있습니다. 상수에 대한 배열을 사용한다는 생각은 나에게 조금 뒤떨어져 보입니다.
내가 대신 제안하는 것은 자신의 상수 클래스를 정의하고이를 상수로 사용하는 것입니다.
from https://stackoverflow.com/questions/1290318/php-constants-containing-arrays by cc-by-sa and MIT license
'PHP' 카테고리의 다른 글
offline_access deprecation 이후 액세스 토큰 유효성을 확장하는 방법 (0) | 2018.09.15 |
---|---|
Laravel Eloquent를 사용하여 여러 where 절을 만드는 방법은 무엇입니까? (0) | 2018.09.15 |
preg_match (); - 알 수없는 수정 자 '+'[중복] (0) | 2018.09.15 |
Mysqli_Query 경고 : mysqli_query ()는 매개 변수 1이 mysqli [duplicate]가 될 것으로 기대합니다. (0) | 2018.09.15 |
두 배열 간의 차이 (0) | 2018.09.15 |