Perché funzioni e metodi in PHP non fanno distinzione tra maiuscole e minuscole?


107

Le funzioni ei metodi in PHP non fanno distinzione tra maiuscole e minuscole, come illustrato nell'esempio seguente.

function ag()
{
    echo '2';
}

Ag();
class test {
    function clMe()
    {
        echo 'hi';
    }
}

$instance = new test;
$instance->clme();

Ma questo non è il caso delle variabili. Qual è la logica?


161
PHP non ha bisogno di una logica puzzolente!
Max Shawabkeh

2
"Perché lo dice l'uomo della minestra." Senza logica, ma i riferimenti: php.net/manual/en/functions.user-defined.php (tra gli esempi 3 e 4), php.net/manual/en/language.variables.basics.php
Outis

2
class Share{ share($str){ echo $str; } } $sh = new Share(); $sh->share("string");Potresti essere sorpreso di vedere due chiamate alla condivisione della funzione ($ str). primo per c'tor e seconda chiamata esplicita per gli stessi motivi !!
vivek.m

1
@outis, cosa intendi per "uomo della minestra"?
Pacerier

1
@outis, ti riferisci alla "minestra nazista" di Seinfeld. YouTube , Wikipedia
Kevin Traas

Risposte:


98

Lasciatemi citare da Interview - Il creatore di PHP, Rasmus Lerdorf

La prima versione di PHP era un semplice set di strumenti che ho messo insieme per il mio sito Web e per un paio di progetti. Uno strumento ha eseguito alcune operazioni di registrazione degli hit su un database mSQL, un altro ha agito come interprete dei dati dei moduli. Ho finito con circa 30 diversi piccoli programmi CGI scritti in C prima di ammalarmene, e li ho combinati tutti in un'unica libreria C. Ho quindi scritto un parser molto semplice che selezionasse i tag dai file HTML e li sostituisse con l'output delle funzioni corrispondenti nella libreria C.

Il semplice parser è cresciuto lentamente fino a includere tag condizionali, quindi tag di loop, funzioni, ecc. In nessun momento ho pensato di scrivere un linguaggio di scripting. Stavo semplicemente aggiungendo un po 'di funzionalità al parser di sostituzione della macro. Stavo ancora scrivendo tutta la mia vera logica aziendale in C.

Ho letto da qualche parte che poiché tutte le funzioni introdotte sembravano essenzialmente tag in un documento HTML e poiché i tag HTML non facevano distinzione tra maiuscole e minuscole, ha scelto i nomi delle funzioni in PHP in modo che non facessero distinzione tra maiuscole e minuscole. Successivamente questa funzione è rimasta attiva nella lingua.


66
Ricordo anche una citazione di Rasmus in una conferenza PHP a Parigi che diceva più o meno: "Non sono decisamente un buon programmatore, in termini di seguire rigide regole o standard di codifica, ma posso dire che se fai affidamento sulla distinzione tra maiuscole e minuscole per riconoscere un nome di funzione da un altro, sei in una specie di guai seri! "
Tom Desp

1
è ancora senza distinzione tra maiuscole e minuscole in futuro?
vee

4
Ecco perché i programmatori php usano il carattere di sottolineatura invece di camelcase quando nominano le loro funzioni.
paperstreet7

2
@ paperstreet7 Alcuni lo fanno. Quelli buoni no. Almeno, non più.
Dan

13
@ Dan, molti programmatori "bravi" usano trattini bassi. In effetti, la PSR-0 di proposito non fa una raccomandazione. Un buon programmatore sceglie sottolineature o camelcase e si attiene a quella convenzione. Rendere questa scelta la misura del fatto che qualcuno sia un buon programmatore è piuttosto sciocco.
jdp

34

Sì, i nomi di funzioni e metodi non fanno distinzione tra maiuscole e minuscole.

E sì, i nomi delle variabili fanno distinzione tra maiuscole e minuscole.

Non sono sicuro che ci sia una ragione per questo, tranne che è stato così per molto tempo e, quindi, rimane il caso, per motivi di compatibilità con le versioni precedenti.



Come riferimento, un paio di link / citazioni a varie pagine del manuale:

Per le funzioni ( citazione ) :

Nota: i nomi delle funzioni non fanno distinzione tra maiuscole e minuscole, sebbene di solito sia una buona forma chiamare le funzioni come appaiono nella loro dichiarazione.

E i metodi non sono molto più che funzioni negli oggetti, specialmente quando pensiamo a PHP 4 e alla compatibilità con le versioni precedenti.


E, per le variabili ( virgolette ):

Le variabili in PHP sono rappresentate da un segno di dollaro seguito dal nome della variabile. Il nome della variabile fa distinzione tra maiuscole e minuscole.

E le proprietà degli oggetti non sono molto più che variabili negli oggetti - stessa osservazione su PHP 4 e compatibilità con le versioni precedenti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.