programing

php const 배열

newsource 2023. 9. 27. 17:59

php const 배열

이것이 배열을 php의 상수로 가지는 유일한 방법인가요 아니면 이것이 나쁜 코드인가요?

class MyClass
{
    private static $myArray = array('test1','test2','test3');

    public static function getMyArray()
    {
       return self::$myArray;
    } 
}

코드는 괜찮습니다. 버전 5.6 이전의 PHP에서는 배열이 일정하다고 선언할 수 없으므로 정적 접근 방식이 최선의 방법일 것입니다.주석을 통해 이 변수를 상수로 표시하는 것을 고려해야 합니다.

/** @const */
private static $myArray = array(...);

PHP 5.6.0 이상에서는 배열이 일정하다고 선언할 수 있습니다.

const myArray = array(...);

PHP 5.6.0(2014년 8월 28일)부터는 배열 상수를 정의할 수 있습니다(PHP 5.6.0의 새로운 기능 참조).

class MyClass
{
    const MYARRAY = array('test1','test2','test3');

    public static function getMyArray()
    {
        /* use `self` to access class constants from inside the class definition. */
        return self::MYARRAY;
    } 
}

/* use the class name to access class constants from outside the class definition. */
echo MyClass::MYARRAY[0]; // echo 'test1'
echo MyClass::getMyArray()[1]; // echo 'test2'

$my = new MyClass();
echo $my->getMyArray()[2]; // echo 'test3'

PHP 7.0.0(2015년 12월 3일)을 사용하면 define()으로 배열 상수를 정의할 수 있습니다.PHP 5.6에서는 const로만 정의할 수 있었습니다.(PHP 7.0.0의 새로운 기능 참조)

define('MYARRAY', array('test1','test2','test3'));

제가 직접 답을 찾다가 우연히 이 실을 발견했습니다.필요한 모든 기능을 통해 배열을 통과해야겠다고 생각한 후에 말입니다.어레이와 mysql에 대한 나의 경험은 직렬화가 가능할지 궁금하게 만들었습니다.물론 그렇다.

define("MYARRAY",     serialize($myarray));

function something() {
    $myarray= unserialize(MYARRAY);
}

다음을 사용할 것을 제안합니다.

class MyClass
{
    public static function getMyArray()
    {
       return array('test1','test2','test3');
    } 
}

이렇게 하면 상수 배열이 있고 아무도 변경할 수 없으며 클래스 자체의 메서드도 변경할 수 없습니다.

마이크로 최적화 가능성(현재 PHP 컴파일러가 얼마나 최적화하는지 확실하지 않음):

class MyClass
{
    public static function getMyArray()
    {
       static $myArray = array('test1','test2','test3');
       return $myArray;
    } 
}

정적으로 표시하는 것이 좋은 대안입니다.정적 배열을 캡슐화하여 일정한 동작을 얻는 예는 다음과 같습니다.

class ArrayConstantExample {

    private static $consts = array(
        'CONST_MY_ARRAY' => array(
            1,2,3,4
        )
    );

    public static function constant($name) {
        return self::$consts[$name];
    }

}

var_dump( ArrayConstantExample::constant('CONST_MY_ARRAY') );

인쇄:

array(4) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) }

상수 배열이 아닌 정적 배열을 만들었습니다.정적 변수는 가변적이고 상수는 불변입니다.코드는 나쁘지 않지만 의도한 대로 작동하지 않습니다.

PHP 5.6에서는 다음과 같이 선언할 수 있습니다.const배열들의 이전 설명을 봐주시기 바랍니다.

아마도 당신은 다음과 같은 것을 원할 것입니다.

class MyClass
{
    const MY_ARRAY = array('test1','test2','test3');

    public function getMyArray()
    {
       return MY_ARRAY;
    } 
}

상수에는 없음이 있습니다.$그들의 불변성을 나타내는 접두사.$foo는 변수입니다.FOO아닙니다.또한 상수 이름은 항상 대문자로 표시됩니다. 적어도 제가 경험한 프로그래밍 언어에서는 말이죠.이것은 컴파일러에 의해 시행되는 것이 아니라 단순히 (거의?)입니다.보편적 코딩 방식의 규약가시성 키워드public,protected,그리고.private상수에는 적용하지 않습니다.마침내.static함수를 사용할 것인지 여부에 따라 적용할 수도 있고 적용할 수도 있습니다.static.

PHP 5.6 이후부터는 상수를 스칼라식으로 정의하는 것이 가능하며, 배열 상수를 정의하는 것도 가능합니다.

class foo {
   const KEYS = [1, 3, 6, 7];
}
//
echo foo::KEYS[0]; // 1

언급URL : https://stackoverflow.com/questions/12129066/php-const-arrays