2011-08-22 2 views
6

è possibile che una variabile sia referenziata senza utilizzare $?

Ad esempio:

if ($a != 0 && a == true) { 
... 
} 

Io non la penso così, ma il codice (non scritto da me) non mostra un errore e penso che sia strano. Ho trascurato il codice e neanche una costante.

+5

provare: 'error_reporting (E_ALL^​​E_STRICT);' E php ti dirà che non è riuscito a trovare '$ a' e utilizzerà invece un letterale' a' (che indica il carattere a) per il comparsion. – Yoshi

+0

@Yoshi: scrivi una risposta; p –

+0

@Tomalak Geret'kal Michael include già questo punto e ha anche una spiegazione migliore.; P – Yoshi

risposta

8

In PHP, è possibile definire una costante, che non avrebbe quindi uno $, ma una variabile deve averne uno. Tuttavia, questa NON è una variabile e non è un sostituto di una variabile. Le costanti devono essere definite esattamente una volta e non modificate per tutta la durata dello script.

define('a', 'some value for a'); 

Inoltre, non è possibile interpolare il valore di una costante all'interno di una stringa con virgolette doppie o heredoc:

$a = "variable a" 
define('a', 'constant a'); 

echo "A string containing $a"; 
// "A string containing variable a"; 

// Can't do it with the constant 
echo "A string containing a"; 
// "A string containing a"; 

Infine, PHP può emettere un avviso per un Use of undefined constant a - assumed 'a' e interpretare come erroneamente non quotate stringa "a". Cerca nel tuo log degli errori per vedere se ciò sta accadendo. In tal caso, "a" == TRUE è valido, poiché la stringa "a" non è vuota e viene confrontata liberamente con il valore booleano VERO.

echo a == TRUE ? 'true' : 'false'; 
// Prints true 
// PHP Notice: Use of undefined constant a - assumed 'a' 
+0

Inoltre, per impostazione predefinita, se PHP rileva una costante indefinita, assume una costante con il valore della stringa. Con il tuo esempio di a, PHP lo interpreterà come una costante denominata a, con un valore di 'a' (come una stringa). Ciò causa un avviso o qualcosa del genere: aumenta il valore di segnalazione degli errori per vederlo. – Narcissus

+0

@Narcissus grazie - già aggiunto mentre stavi scrivendo il tuo commento :) –

2

Con questo codice:

if ($a != 0 && a == true) { 
    ... 
} 

non stai ricevendo alcun errore perché voi (o qualcun altro) hai detto PHP di non segnalare eventuali errori, avvisi o avvisi con quel codice. È possibile impostare la segnalazione degli errori a un livello superiore e si otterrà un avviso:

Avviso: l'uso di costante indefinita a - assunto 'a' in ...

il che significa che si legge a come costante con un valore di "a". Questo non è quello che si sta effettivamente cercando immagino:

if ($a != 0 && "a" == true) { 
    ... 
} 

La seconda parte "a" == true sarà sempre true, quindi questo è in realtà in questo modo:

if ($a != 0) { 
    ... 
} 

Poiché non è il tuo codice, uno posso solo supporre che questo non era inteso dall'autore originale.

Quindi: le variabili in PHP iniziano sempre con il simbolo del dollaro $. Tutto il resto non è una variabile.

1

Per definizione una variabile DEVE iniziare con $. Inoltre, lo non può iniziare con un numero quindi un nome di variabile come $ 1badVar non è valido. Tuttavia, può iniziare con lettere o caratteri di sottolineatura.