Co robisz? Żadna struktura nie jest lepsza we wszystkim, dlatego oba istnieją. To naprawdę zależy od twojego zestawu problemów, który jest "lepszy". I nawet wtedy może to być po prostu przypadek, który wolisz. Wiele projektów architektury i kodu to osobiste preferencje i styl.
Ogólnie rzecz biorąc, istnieje tylko jeden raz, gdy użyłbym obiektu bez metody (stdclass
lub zdefiniowanego przez użytkownika) nad tablicą. To znaczy, jeśli muszę bardzo dużo przekazywać te dane i modyfikować je w wielu miejscach. Z tablicą musisz przekazać ją przez referencję, co jest uciążliwe i może wprowadzić źródła błędu ... Z obiektem jest on przekazywany domyślnie jako odniesienie do obiektu (nie jako odniesienie do zmiennej, ale jako wskaźnik do tego samego obiekt). Więc z tablicy trzeba by zrobić coś takiego:
function doSomething($inVar, array &$inOutArray) {
$inOutArray['bar'] = 'baz';
}
dla każdej funkcji, która modyfikuje (lub może modyfikować) tablicę.
Podczas gdy z obiektu, można po prostu zrobić:
function doSomething($inVar, $object) {
$object->bar = 'baz';
}
Jest krótszy (pamiętaj, tylko jedna postać, ale jest to jeden znak wszędzie może chcesz zmodyfikować tablicę). To mniej podatne na błędy, ponieważ jeśli później zrobić $object = new Something()
, to nie zmieni oryginalnego obiektu (ponieważ nie jest zmienna referencyjna) ...
Jedynym argumentem jest to, że nieco mniej czytelne, ponieważ &
pokazach wyraźnie, że zamierzasz zmodyfikować tę zmienną wejściową. Ale jeśli rozumiesz, jak działają obiekty w PHP 5, nie powinieneś być zaskoczony (a więc jest to akceptowalna kompromitacja w moim umyśle) ...
Dlaczego mówisz, że 1 jest lepszy niż 2? Osobiście nie zgadzam się z tym stwierdzeniem. Czy możesz wyjaśnić, dlaczego uważasz, że 1 jest lepszy niż 2? Czy mówimy o wydajności, zużyciu pamięci, praktyce kodowania? Zajrzyj na: http://particletree.com/notebook/object-oriented-php-memory-concerns/. – Chris
Wskazówka: może tablice zużywają mniej zasobów. – fabrik
@ Chris: Myślę, że przeczytałem gdzieś, że jeśli potrzebujesz struktury do przechowywania danych, to 1 jest preferowaną drogą. –