2010-05-04 11 views
7

Da quello che so di PHP, la seguente sintassi è non legale:PHP senza citazioni

if ($s == Yes) 

Dovrebbe invece essere scritto come:

if ($s == 'Yes') 

Tuttavia, la prima esempio sta funzionando bene. Qualcuno sa perché?

+0

Sviluppa sempre PHP con TUTTI i messaggi di errore su. Tutte le notifiche invisibili rallentano la tua applicazione e la rendono inutilizzabile per gli altri che non hanno disattivato la segnalazione degli errori. –

risposta

13

Ordinariamente, sarebbe interpretato come una costante, ma se PHP non riesce a trovare una costante con quel nome, allora assume che sia una stringa letterale nonostante la mancanza di virgolette. Questo genererà un messaggio E_NOTICE (che potrebbe non essere visibile, a seconda del livello di segnalazione degli errori); qualcosa di simile:

Avviso: l'uso di indefinito costante Sì - ha assunto 'Sì' in script.php on line 3

In sostanza, PHP è solo eccessivamente indulgente.

8

In breve, PHP si comporta come se le virgolette fossero presenti.

Se PHP non riconosce qualcosa come token riservato, lo considera come una stringa letterale.

Il registro degli errori mostrerà un avviso a riguardo.

1

Il primo non è una stringa.

E non è funziona bene:

error_reporting(E_ALL); 
if ($s == Yes) {} 

E 'un retaggio dei tempi in cui PHP eri solo un "Pretty home page" modulo interprete e fortemente sconsigliato al giorno d'oggi.

0

In PHP, Sì sarebbe considerato come una costante. Se la costante non è definita, assumerai che tu intenda la stringa "Sì". Dovrebbe generare una notifica se li hai attivati.

1

È necessario avere sia error_reporting che mostrano le notifiche che display_errors sono attivate.

error_reporting(E_ALL | E_STRICT); 
ini_set('display_errors', '1'); 

if ($s == Yes) { 
    // foo 
} 
0

PHP converte Sì in "Sì" internamente quando viene rilevato un Sì costante non definito.

Btw .. Se quello che vuoi è confrontare se $ s ha "Sì" come valore di una è una stringa allora dovete

a) utilizzano strcmp o b) utilizzano l'operatore identità "=== "