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.