php make dollaro opzionale [chiuso]

-2

C'è qualche ragione per cui il linguaggio PHP non può essere aggiornato in una versione futura per rendere facoltativo il prefisso $ sui nomi delle variabili? Ragioni che potrebbero rompere il codice esistente?

Penso che sarebbe ancora necessario per l'interpolazione delle stringhe, come "Hello $ name", ma la maggior parte delle volte sarebbe opzionale.

Ad esempio,

$name = 'Bob';
echo "Hello $name";

sarebbe ancora valido, ma lo sarebbe anche

name = 'Bob';
echo "Hello $name";
    
posta David Winiecki 12.09.2014 - 19:28
fonte

2 risposte

3

Il sigillo per una variabile in php è parte di come funziona il sistema. Trasmette alcune informazioni per il parser su cosa sia effettivamente la cosa. Mantenendo le variabili e le funzioni in spazi di nomi completamente diversi, consente di avere nomi di variabili che sono nomi di funzioni senza collisione.

Il frammento senza collisione è un po 'importante in php, dal momento che è noto che ha alcune funzioni standard . Ciò è ulteriormente complicato, ma egli sostiene che le parentesi per le funzioni sono facoltative. Le parentesi fanno parte del modo in cui gli altri linguaggi senza sigilli spesso si separano se l'identificatore è un valore o una funzione.

int foo() { return 42; }

int foo = 42;
int bar;

bar = foo;
bar = foo();

In Java, (il codice sopra) non vi è alcuna ambiguità su quale foo venga utilizzato in ogni riga perché () è richiesto per le chiamate di funzione.

Questo non è il caso in php.

$echo = "foo";
echo $echo;
echo($echo);

Entrambi sono perfettamente validi. È il sigillo che dice che un eco è una chiamata di funzione e l'altro è una variabile.

Quindi, no, il sigillo per una variabile non può essere reso opzionale in php. Fa parte del sistema di tipi e della ricerca dell'identificatore e del parser. Trasmette le informazioni necessarie che consentono a altre cose di essere opzionali (come le parentesi).

Per divertimento, considera il seguente codice ( ideone ) e l'impatto che i sigilli hanno sulle funzioni di prima classe:

function greet($arg) { return "Hello $arg\n"; }

$greet = function($arg) { return "Greetings $arg\n"; };

echo $greet("Everyone");
echo greet("World");

E mentre ci sono modi per aggirare questo problema in altri linguaggi che mancano sigilli che hanno funzioni di prima classe, la combinazione di sigilli e funzioni anonime può essere vista come rendere le cose un po 'più facili per il programmatore e per il progettista del linguaggio presso il contemporaneamente.

    
risposta data 12.09.2014 - 21:39
fonte
3

Probabilmente romperebbe tonnellate di codice esistente. Usare il sigillo significa che le variabili possono usare gli stessi nomi delle parole chiave, delle funzioni (built-in o definite dall'utente), delle classi, ecc.

    
risposta data 12.09.2014 - 19:41
fonte

Leggi altre domande sui tag