[php] PHP에서 배열을 초기화하는 가장 좋은 방법

다른 언어 (예 : AS3)에서는 이와 같이 수행하면 객체 생성 및 인스턴스화가 var foo = []아닌 새로운 배열을 초기화하는 것이 더 빠릅니다 var foo = new Array(). PHP에 동등한 것이 있는지 궁금합니다.

class Foo {
    private $arr = array(); // is there another / better way?
}



답변

ECMAScript 구현 (예 : ActionScript 또는 JavaScript)에서 Array()생성자 함수이며 []배열 리터럴 문법의 일부입니다. 둘 다 완전히 다른 방식으로 최적화되고 실행되며 문자 호출은 함수 호출의 오버 헤드로 인해 방해받지 않습니다.

반면에 PHP는 함수처럼 보이지만 그렇게 취급되지 않는 언어 구조를 가지고 있습니다. []대안으로 지원하는 PHP 5.4의 경우에도 컴파일러 / 파서와 관련하여 완전히 동의어이므로 오버 헤드에는 차이가 없습니다.

// Before 5.4, you could only write
$array = array(
    "foo" => "bar",
    "bar" => "foo",
);

// As of PHP 5.4, the following is synonymous with the above
$array = [
    "foo" => "bar",
    "bar" => "foo",
];

이전 버전의 PHP를 지원해야하는 경우 이전 구문을 사용하십시오. 가독성에 대한 논쟁도 있지만 오랜 JS 개발자이기 때문에 후자는 다소 자연 스럽습니다. 실제로 []PHP를 처음 배울 때 사용하여 배열을 초기화하는 실수를 저질렀습니다 .

이러한 언어 변경 은 원래 다음과 같은 이유로 핵심 개발자에 대한 다수의 투표로 인해 제안 및 거부되었습니다.

이 패치는 핵심 개발자의 대다수가 투표를했기 때문에 허용되지 않습니다. 핵심 개발자와 사용자 투표 사이에 누적 된 평균을 취하면 반대 의견을 나타내는 것처럼 보이지만 장기적으로 패치 마녀가 지원되지 않거나 유지되지 않는 것은 패치 마녀를 제출하는 것이 무책임한 것으로 보입니다.

그러나 ECMAScript 구문을 사용하는 MongoDB와 같은 인기있는 데이터베이스에 대한 지원 구현의 영향을 받아 최대 5.4로 바뀌는 마음의 변화가있는 것으로 보입니다.


답변

$myArray = []; 

빈 배열을 만듭니다.

나중에 다음과 같이 배열에 값을 넣을 수 있습니다.

$myArray[] = "tree";
$myArray[] = "house";
$myArray[] = "dog";

이 시점에서 $ myArray에는 “tree”, “house”및 “dog”이 포함됩니다. 위의 각 명령은 이미 존재했던 항목을 보존하면서 배열에 추가합니다.

다른 언어에서 왔을 때 배열에 추가하는이 방법은 나에게 이상하게 보였습니다. $ myArray + = “dog”과 같은 작업이나 Visual Basic 컬렉션과 같은 “add ()”메서드와 같은 작업을 수행해야했습니다. 그러나이 직접 추가 구문은 확실히 짧고 편리합니다.

실제로 unset () 함수를 사용하여 항목을 제거해야합니다.

unset($myArray[1]); 

… 배열에서 “house”를 제거합니다 (배열은 0을 기준으로 함).

unset($myArray); 

… 전체 배열을 파괴합니다.

분명히 배열에 추가하기위한 빈 대괄호 구문은 단순히 인덱스를 할당하는 대신 PHP가 각 값에 자동으로 인덱스를 할당하도록 지시하는 방법입니다. 덮개 아래에서 PHP는 실제로 다음을 수행합니다.

$myArray[0] = "tree";
$myArray[1] = "house";
$myArray[2] = "dog";

원하는 경우 인덱스를 직접 할당 할 수 있으며 원하는 숫자를 사용할 수 있습니다. 일부 항목에는 색인 번호를 지정할 수 있지만 다른 항목에는 지정할 수 없습니다. 그렇게하면 PHP는 누락 된 인덱스 번호를 채우고 할당 된 최대 인덱스 번호에서 증가합니다.

따라서 이렇게하면 :

$myArray[10] = "tree";
$myArray[20] = "house";
$myArray[] = "dog";

… “dog”항목에는 21의 색인 번호가 부여됩니다. PHP는 증분 색인 할당에 지능적인 패턴 일치를 수행하지 않으므로 “dog”에 30의 색인을 할당하기를 원했을 수도 있습니다. “. 다른 함수를 사용하여 배열의 증분 패턴을 지정할 수 있습니다. 나는 여기에 들어 가지 않을 것이지만 PHP 문서에는 전부 들어 있습니다.

건배,

-= 카메론


답변

PHP 5.4 이전 :

$myArray = array();

PHP 5.4 이상

$myArray = [];


답변

PHP에서 배열은 배열입니다. 기본 대 객체 고려 사항이 없으므로 비교할만한 최적화가 없습니다.


답변

당신이하고있는 일은 100 % 정확합니다.

좋은 이름 지정 측면에서 개인 / 보호 된 속성 앞에는 밑줄이 표시되어 공개되지 않은 것이 분명해집니다. 예 private $_arr = array()또는public $arr = array()


답변

이 시도:

    $arr = (array) null;
    var_dump($arr);

    // will print
    // array(0) { }


답변

없습니다 다른 방법 이 최고입니다 그래서.

편집 :이 답변은 PHP 5.4 이상부터 유효하지 않습니다.