W niektórych innych językach (na przykład AS3) zauważono, że inicjowanie nowej tablicy jest szybsze, jeśli jest wykonywane w ten sposób, var foo = []
a nie var foo = new Array()
ze względu na tworzenie obiektów i tworzenie instancji. Zastanawiam się, czy są jakieś odpowiedniki w PHP?
class Foo {
private $arr = array(); // is there another / better way?
}
php
arrays
initialization
Tom Auger
źródło
źródło
array_fill
? php.net/manual/en/function.array-fill.php$arr = array()
lub$arr = []
Odpowiedzi:
W implementacjach ECMAScript (na przykład ActionScript lub JavaScript)
Array()
jest funkcją konstruktora i[]
jest częścią gramatyki literału tablicowego. Oba są zoptymalizowane i wykonywane na zupełnie różne sposoby, przy czym dosłowna gramatyka nie jest zawłaszczona przez narzut wywołany funkcją.Z drugiej strony PHP ma konstrukcje językowe, które mogą wyglądać jak funkcje, ale nie są traktowane jako takie. Nawet w PHP 5.4, które obsługuje
[]
jako alternatywę, nie ma różnicy w narzutach, ponieważ w przypadku kompilatora / parsera są one całkowicie synonimiczne.Jeśli potrzebujesz obsługi starszych wersji PHP, użyj poprzedniej składni. Istnieje również argument za czytelnością, ale jako wieloletni programista JS wydaje mi się to dość naturalne. Popełniłem błąd, próbując zainicjować tablice przy użyciu,
[]
kiedy uczyłem się PHP.Ta zmiana języka została pierwotnie zaproponowana i odrzucona ze względu na większość głosów przeciw głównym programistom z następującego powodu:
Wydaje się jednak, że nastąpiła zmiana serca prowadząca do wersji 5.4, być może pod wpływem implementacji obsługi popularnych baz danych, takich jak MongoDB (które używają składni ECMAScript).
źródło
$array = [];
ponieważ ułatwia to poruszanie się między JS a PHP.$array = [];
lepsza opcja? lub powinienem spróbować innego. który z nich jest lepszy[]
jest tylko trochę łatwiejsze do pisania.Tworzy pustą tablicę.
Później możesz wypchnąć wartości na tablicę, w ten sposób:
W tym momencie $ myArray zawiera „drzewo”, „dom” i „pies”. Każde z powyższych poleceń dołącza się do tablicy, zachowując elementy, które już tam były.
Pochodząc z innych języków, ten sposób dołączania do tablicy wydawał mi się dziwny. Spodziewałem się, że będę musiał zrobić coś takiego jak $ myArray + = „dog” lub coś w tym stylu… albo może metodę „add ()” taką jak w kolekcjach Visual Basic. Ale ta bezpośrednia składnia z pewnością jest krótka i wygodna.
W rzeczywistości musisz użyć funkcji unset (), aby usunąć elementy:
... usunąłby „house” z tablicy (tablice są zerowane).
... zniszczyłby całą tablicę.
Żeby było jasne, składnia pustych nawiasów kwadratowych do dołączania do tablicy jest po prostu sposobem na powiedzenie PHP, aby automatycznie przypisywała indeksy do każdej wartości, a nie TY przypisujesz indeksy. Pod przykryciem PHP faktycznie robi to:
Możesz samodzielnie przypisywać indeksy, a także dowolne liczby. Możesz także przypisać numery indeksu do niektórych pozycji, a nie innych. Jeśli to zrobisz, PHP uzupełni brakujące numery indeksów, zwiększając od największego numeru indeksu przypisywanego w miarę upływu czasu.
Więc jeśli to zrobisz:
... pozycja „pies” otrzyma numer indeksu 21. PHP nie wykonuje inteligentnego dopasowywania wzorca dla przyrostowego przypisywania indeksu, więc nie będzie wiedział, że być może chciałbyś przypisać indeks 30 do „pies „. Możesz użyć innych funkcji do określenia wzorca przyrostu dla tablicy. Nie będę wchodził w to tutaj, ale to wszystko w dokumentach PHP.
Twoje zdrowie,
- = Cameron
źródło
$array[] = 'foo'
działa dobrze w starszych wersjach PHP. Wystarczy$array = [];
zainicjować tablicę, która jest nowa w 5.4.Przed PHP 5.4:
PHP 5.4 i wyżej
źródło
W PHP tablica jest tablicą; nie ma analizy prymitywnej vs. obiektowej, więc nie można uzyskać porównywalnej optymalizacji.
źródło
To, co robisz, jest w 100% prawidłowe.
Jeśli chodzi o ładne nazewnictwo, często zdarza się, że właściwości prywatne / chronione są poprzedzone znakiem podkreślenia, aby było oczywiste, że nie są publiczne. np
private $_arr = array()
lubpublic $arr = array()
źródło
$this
aby uzyskać wartość i nigdy nie powinieneś używać właściwości publicznych.$this->arr
i$this->_arr
. Dlaczego nigdy nie powinieneś korzystać z nieruchomości publicznych ?!Spróbuj tego:
źródło
Nie ma innej drogi , więc jest najlepsza.Edycja: Ta odpowiedź jest nieprawidłowa od wersji PHP 5.4 i nowszych.
źródło
Inicjowanie prostej tablicy:
Inicjowanie tablicy w tablicy:
Źródło: Sorce dla kodu
źródło