2010-11-12 10 views
12

Widziałem ten kod

if (is_null($$textVarName)) { 
$$textVarName = $_defaultTexts[$type]; 
} 

jaki jest kod "$$"?

+0

możliwe duplikat [? Co robi $$ znaczy w PHP] (http://stackoverflow.com/questions/2715654/what-does-mean-in-php) – Gordon

+0

* (powiązane) * [Co oznacza ten symbol w PHP] (http://stackoverflow.com/questions/3737139/reference-what-does-this-symbol-mean-in-php) – Gordon

+0

Wielkie dzięki Gordon – meotimdihia

Odpowiedz

31

To zło jest tym, czym jest.

To zajmie wartość podaną w $textVarName i użyje jej jako nazwy zmiennej. Na przykład:

$foo = 'hello'; 
$hello = 'The Output'; 
echo $$foo; // displays "The Output" 
+0

@ VoteyDisciple; czy to nieskończone? Czy mogę mieć "$$$ foo"? A może przestaje o drugiej? – BeemerGuy

+4

@Bememer: nie ma końca. Przy okazji, szybciej jest próbować - niż pytać i czekać na odpowiedź. – zerkms

+0

@zerkms: dziękuję za odpowiedź, ale czy przyszło ci do głowy, że nie mam przy sobie kompilatora? – BeemerGuy

4
foreach($_POST as $key=>$value)$$key=$value; 

teraz automagicznie, jeżeli poprzednia forma miała pole o nazwie „nazwa użytkownika” masz teraz zmienną o nazwie $ nazwa użytkownika, która posiada wartość złożonej w formie. Nie jest to najlepsza lub bezpieczna metoda, ale kiedy masz kieszeń pełną gwoździ, jest to niezła robota. Jest to bardzo zła praktyka i nigdy nie jest do tego zachęcana, ale wszystkie kodery PHP, jakie znam, potajemnie ją lubią.

+1

Cześć, jestem cfreak i jestem programistą PHP. Teraz mnie znasz. Absolutnie nienawidzę tego. :-) (oczywiście nie lubię PHP w ogóle, ale płaci rachunki, więc to robię) – Cfreak

+0

Pomimo tego, że jest to zła praktyka ... Uwielbiam to! Miałem kiedyś 50 pozycji w '$ _POST' i na pewno nie było fajnie robić zmienną dla każdej z nich (nawet przy automatyzacji z czymś takim jak Excel). Szkoda, że ​​nie znałem wtedy tego skrótu. – BeemerGuy

+5

Zauważ, że możesz użyć 'extract ($ _ POST, EXTR_PREFIX_ALL," p _ ")', aby osiągnąć ten sam efekt - plus więcej bezpieczeństwa ze zmiennym prefiksem. Punkty bonusowe za filtrowanie 'array_map'. – mario