2009-08-03 14 views
51

Może ktoś wyjaśnić różnicę pomiędzy używaniemDEFINE vs zmienna w PHP

define('SOMETHING', true); 

i

$SOMETHING = true; 

i być może korzyści między jednej lub drugiej?

Używam zmiennych wszędzie, a nawet w pliku typu konfiguracji, który jest dołączony do każdej strony nadal używam zmiennych, ponieważ nie widzę powodu, dla którego należy użyć metody define.

Odpowiedz

76

DEFINE tworzy stałą, a stałe są globalne i mogą być używane w dowolnym miejscu. Nie można też na nowo zdefiniować, które zmienne mogą być.

Zwykle używam DEFINE dla Configs, ponieważ nikt nie może z nim pogodzić po fakcie, i mogę to sprawdzić w dowolnym miejscu bez globalnego lingingu, co ułatwi kontrolę.

+0

mogę przekazać identyfikator użytkownika z bazy danych do sesji? na przykład define ($ _ SESSION ['user_id'], wiersz ['id']), którego wiersz ['id'] pochodzi z bazy danych –

11

Po zdefiniowaniu "stałej" nie można zmienić w czasie wykonywania, podczas gdy zwykłe przypisanie zmiennych może.

Stałe są lepsze dla takich rzeczy jak dyrektywy konfiguracyjne, których nie należy zmieniać podczas wykonywania. Co więcej, kod jest łatwiejszy do odczytania (i utrzymywania w stanie gotowości &), jeśli wartości, które mają być stałe, wynoszą jawnie.

6

define() tworzy zmienną tylko do odczytu w porównaniu ze standardową zmienną obsługującą operacje odczytu i zapisu.

+1

tylko notka - nie rozumiem, w jaki sposób termin "zmienne tylko do odczytu" ma zastosowanie do define() - jak stwierdza instrukcja, definiuje * nazwaną stałą *, która jest czymś zupełnie innym. –

+0

-1: błędne, a nawet gdyby tak nie było, po prostu powtórzy powyższe dwa posty. – hobodave

+2

Stała nie jest zmienną z definicji (nie gra słów przeznaczonych) ;-) –

3

Istnieje również różnica w zakresie.

W przykładzie podanym na orignal poster, $SOMETHING nie będzie dostępny w ramach funkcji, podczas gdy define('SOMETHING', true) będzie.

0

Stała jest bardzo przydatna, gdy chcemy dane dostępowe od wewnątrz funkcji, to sprawdzić

<?php function data(){ 
define("app","hey you can see me from outside the function",false); 

$tech = "xampp"; } data(); echo $tech; echo app; ?> 

Jeśli użyć zmiennej nigdy nie dostają się do wartości wewnątrz Oto co się

Wskazówka: Undefined zmiennej: tech w D: \ xampp \ htdocs \ data \ index.php on line 8 hej widać mnie z poza funkcją