To się nie udało:
define('DEFAULT_ROLES', array('guy', 'development team'));
Najwyraźniej stałe nie mogą przechowywać tablic. Jaki jest najlepszy sposób na obejście tego?
define('DEFAULT_ROLES', 'guy|development team');
//...
$default = explode('|', DEFAULT_ROLES);
To wydaje się niepotrzebnym wysiłkiem.
Odpowiedzi:
UWAGA: chociaż jest to zaakceptowana odpowiedź, warto zauważyć, że w PHP 5.6+ możesz mieć stałe tablice - patrz odpowiedź Andrei Faulds poniżej .
Możesz również serializować tablicę, a następnie umieścić ją w stałej:
źródło
$fruit = FRUITS[0];
Od wersji PHP 5.6 możesz zadeklarować stałą tablicy za pomocą
const
:Krótka składnia również działa, jak można się spodziewać:
Jeśli masz PHP 7, możesz w końcu użyć
define()
, tak jak wcześniej próbowałeś:źródło
define()
tutaj w PHP 5.6, ale zostało to naprawione w PHP 7.0 . :)Możesz przechowywać je jako zmienne statyczne klasy:
Jeśli nie podoba Ci się pomysł, że tablica może być zmieniana przez innych, getter może pomóc:
EDYTOWAĆ
Od PHP5.4 można nawet uzyskać dostęp do wartości tablic bez potrzeby stosowania zmiennych pośrednich, tj. Następujące działania:
źródło
const AtomicValue =42; public static $fooArray = ('how','di')
Używam tego w ten sposób. Mam nadzieję, że pomoże innym.
config.php
W pliku, w którym potrzebuję stałych.
źródło
Tego używam. Jest podobny do przykładu dostarczonego przez soulmerge, ale w ten sposób można uzyskać pełną tablicę lub tylko jedną wartość w tablicy.
Użyj tego w ten sposób:
źródło
Możesz przechowywać go jako ciąg JSON w stałej. Z punktu widzenia aplikacji JSON może być przydatny w innych przypadkach.
źródło
Począwszy od PHP 5.6, możesz definiować stałe tablice używając
const
słowa kluczowego jak poniżeji różne elementy są dostępne jak poniżej:
Począwszy od PHP 7, stałe tablice można zdefiniować, korzystając z
define
poniższego opisu:i do różnych elementów można uzyskać dostęp w taki sam sposób jak poprzednio.
źródło
Wiem, że to trochę stare pytanie, ale oto moje rozwiązanie:
Zdefiniowałem to, ponieważ musiałem przechowywać obiekty i tablice w stałych, więc zainstalowałem także runkit na php, aby móc zmienić zmienną $ const na superglobalną.
Możesz użyć go jako
$const->define("my_constant",array("my","values"));
lub po prostu$const->my_constant = array("my","values");
Aby uzyskać wartość, wystarczy zadzwonić
$const->my_constant;
źródło
__get
i__set
... Muszę powiedzieć, że ta metoda jest świetna.PHP 7+
Począwszy od PHP 7, możesz po prostu użyć funkcji defin (), aby zdefiniować stałą tablicę:
źródło
Może nawet pracować z tablicami asocjacyjnymi ... na przykład w klasie.
źródło
Korzystając z funkcji wybuchania i implodowania, możemy improwizować rozwiązanie:
To odbije się echem
email
.Jeśli chcesz go bardziej zoptymalizować, możesz zdefiniować 2 funkcje, które będą wykonywać powtarzające się czynności:
Mam nadzieję, że to pomaga. Szczęśliwego kodowania.
źródło
Wykonanie jakiejś sztuczki ser / deser lub kodowania / dekodowania wydaje się brzydkie i wymaga zapamiętania, co dokładnie zrobiłeś, gdy próbujesz użyć stałej. Myślę, że prywatna zmienna statyczna klasy z akcesorium jest przyzwoitym rozwiązaniem, ale zrobię ci to lepiej. Po prostu skorzystaj z publicznej metody pobierania statycznego, która zwraca definicję stałej tablicy. Wymaga to minimum kodu i definicji tablicy nie można przypadkowo zmodyfikować.
Jeśli naprawdę chcesz, aby wyglądał jak zdefiniowana stała, możesz nadać mu nazwę wielkimi literami, ale byłoby mylące, aby pamiętać o dodawaniu nawiasów „()” po nazwie.
Podejrzewam, że możesz sprawić, by metoda globalna była bliższa funkcjom definiowania (), o które prosiłeś, ale naprawdę powinieneś tak czy inaczej zawrzeć stałą nazwę i unikać globalizacji.
źródło
Możesz zdefiniować w ten sposób
źródło
Tak, możesz zdefiniować tablicę jako stałą. Począwszy od PHP 5.6 , można zdefiniować stałą jako wyrażenie skalarne, a także można zdefiniować stałą tablicową . Można zdefiniować stałe jako zasób, ale należy tego unikać, ponieważ może to spowodować nieoczekiwane wyniki.
Z odniesieniem do tego linku
Miłego kodowania.
źródło
Jeśli szukasz tego od 2009 roku i nie lubisz AbstractSingletonFactoryGenerators, oto kilka innych opcji.
Pamiętaj, że tablice są „kopiowane” po przypisaniu lub w tym przypadku zwracane, więc za każdym razem otrzymujesz tę samą tablicę. (Zobacz zachowanie tablic podczas kopiowania przy zapisie).
źródło
jeśli używasz PHP 7 i 7+, możesz również użyć takiego pobierania
źródło
Stałe mogą zawierać tylko wartości skalarne, sugeruję przechowywanie serializacji (lub reprezentacji zakodowanej w JSON) tablicy.
źródło