2014-07-26 12 views
5

In PHP, il seguente codice non produce un errore di sintassi. Come sviluppatore, questo produrrà un errore di sintassi nella mia testa. Qualche indizio?

<?php 
$ $ $ $ $ $ $what_the_hell_php = 'what is wrong with you PHP?'; 

echo $what_the_hell_php; // no output 
echo $ $ $ $ $ $ $what_the_hell_php; // worth a try but no output too 

// echo $; // well, don't do this. this produces an actual PHP syntax error. 

$dollars = 'a lot of money will make me crazy'; 
echo $dollars; 
echo $$$$$$$$$$$$$$$$$$$$$$$$$$ $lotsofmoney = " - and PHP too!"; 

// echo $$$$$$something $hello = 'hello'; // won't work, PHP likes pure dollars 

// is it for this?? 
echo 

    $$$  $$$$$$ $$$$$$ $$$$ $$$$  $$$ $$$$$$$$ $$$$$$$$ 
    $$ $$ $$ $$ $$ $$ $$ $$  $$ $$ $$  $$ $$ 
$$ $$ $$  $$  $$ $$  $$ $$ $$  $$ $$ 
$$  $$ $$$$$$ $$  $$ $$  $$  $$ $$$$$$$$  $$ 
$$$$$$$$$  $$ $$  $$ $$  $$$$$$$$$ $$ $$  $$ 
$$  $$ $$ $$ $$ $$ $$ $$  $$  $$ $$ $$  $$ 
$$  $$ $$$$$$ $$$$$$ $$$$ $$$$ $$  $$ $$  $$ $$ 

$ascii = "<hr />\nMy ASCII art is not a string or a comment! First time!"; 

?> 

... e l'output:

a lot of money will make me crazy - and PHP too!<hr /> 
My ASCII art is not a text or a comment! First time! 

risposta

6

PHP ha un concetto di "variable variables", che consente di consultare in modo dinamico a una variabile il suo nome. Ad esempio:

$a = 'foo'; 
$b = 'a'; 
$c = 'b'; 
$d = 'c'; 

echo $ $ $ $d; // foo 

E quando lo si utilizza in un incarico? Speriamo che questo aiuterà a dimostrare un po ':

$a = 'foo'; 
$$a = 'bar'; 

echo $foo; // bar 

Quindi, in questo codice:

echo $ $ $ $ $ $ $what_the_hell_php = 'what is wrong with you PHP?' 

Per assegnare il valore, il motore otterrà il valore attualmente memorizzato in $what_the_hell_php, quindi ottenere il valore memorizzato in la variabile con quel nome, quindi ottiene il valore memorizzato nella variabile con quel nome e così via. Naturalmente, nel tuo esempio, $what_the_hell_php è inizialmente nullo, quindi non sarà in grado di dereferenziare queste variabili. Tuttavia, il risultato dell'espressione di assegnazione è ancora un valore, proprio come tutte le espressioni di assegnazione:

echo $a = $b = $c = 'foo'; // foo 
+0

Non sapeva che funziona con gli spazi. Questo lo spiega! – rationalboss

+0

@rationalboss Ho provato ad elaborare un po 'di più. –

Problemi correlati