Stavo cercando un codice e ho trovato alcune chiamate a mySQL_fetch_array
. PHP fa distinzione tra maiuscole e minuscole sui nomi delle funzioni? Ricordo di aver letto questo da qualche parte ma non riesco a trovare alcun riferimento ad esso.
Stavo cercando un codice e ho trovato alcune chiamate a mySQL_fetch_array
. PHP fa distinzione tra maiuscole e minuscole sui nomi delle funzioni? Ricordo di aver letto questo da qualche parte ma non riesco a trovare alcun riferimento ad esso.
Risposte:
Sto citando da questo :
Nota: i nomi delle funzioni non fanno distinzione tra maiuscole e minuscole, sebbene di solito sia una buona forma chiamare le funzioni così come appaiono nella loro dichiarazione.
Quindi, sembra che le funzioni definite dall'utente non facciano distinzione tra maiuscole e minuscole, c'è stato un voto per rendere funzioni / oggetti in PHP5 sensibili al maiuscolo / minuscolo.
TL; DR: i nomi delle classi non fanno distinzione tra maiuscole e minuscole, ma usano sempre lo stesso caso della dichiarazione (lo stesso delle funzioni). Inoltre, la creazione di istanze di classi con maiuscole e minuscole diverse come sono state definite può causare problemi con i caricatori automatici.
Inoltre, i nomi delle classi non fanno distinzione tra maiuscole e minuscole:
<?php
class SomeThing {
public $x = 'foo';
}
$a = new SomeThing();
$b = new something();
$c = new sOmEtHING();
var_dump($a, $b, $c);
Questo produce:
class SomeThing#1 (1) {
public $x =>
string(3) "foo"
}
class SomeThing#2 (1) {
public $x =>
string(3) "foo"
}
class SomeThing#3 (1) {
public $x =>
string(3) "foo"
}
Il problema è l'utilizzo di caricatori automatici e file system sensibili al maiuscolo / minuscolo (come ext2 / 3/4), in quanto è necessario chiamare il nome della classe con lo stesso caso in cui è denominato il file contenente la classe (non come viene effettivamente scritto il nome della classe), oppure usa strtolower
:
Il file di classe:
<?php
// filename something.php
class SomeThing {
...
}
La funzione del caricatore automatico ( __autoload
o una funzione con cui registrarsi spl_autoload_register
)
function my_autloader($className) {
$filename = CLASSES_DIR . DIRECTORY_SEPARATOR . $className . '.php';
if (file_exists($filename)) {
require($filename);
}
}
Ora con questo codice:
$a = new something(); // works
$b = new SomeThing(); // does not work
$c = new SOMETHING(); // does not work
Puoi farlo funzionare (es. Avere nomi di classe che non fanno distinzione tra maiuscole e minuscole utilizzando un caricatore automatico) se hai aggiunto una chiamata a strtolower()
nel codice del caricatore automatico, ma come con le funzioni, è semplicemente meglio fare riferimento a una classe nello stesso modo in cui è dichiarato, avere il nome del file con la stessa maiuscola del nome della classe, utilizzare i caricatori automatici e dimenticare di usare strtolower
e simili.
In PHP le variabili fanno distinzione tra maiuscole e minuscole ma le funzioni non hanno problemi come questo. Puoi usare le seguenti istruzioni per visualizzare l'output, tutte mostreranno lo stesso risultato.
<?php
Echo "This is a test script";
ECHO "This is a test script";
echo "This is a test script";
?>
D'altra parte, se si modifica la distinzione tra maiuscole e minuscole delle variabili, verrà visualizzato l'errore.
Esempio:
<?php
$a=5;
echo $A;// It will show the error.
?>
Produzione:
Notice: Undefined variable: A in C:\xampp\htdocs\test.php on line 3
E anche i nomi dei metodi non fanno distinzione tra maiuscole e minuscole. per esempio:-
<?php
class C {
public function method() { }
public function METHOD() { }
}
produzione:
PHP Fatal error: Cannot redeclare C::METHOD() in ....php on line 6
In conclusione la risposta di tutti. Anche se PHP non richiede la coerenza tra maiuscole e minuscole in tutti i casi, anche fino ad ora in PHP5.
La migliore pratica sarà
usa sempre gli stessi casi quando si fa riferimento a una delle variabili (è 'obbligatorio) o alle funzioni (è' opzionale, ma consigliato).
Non si sa mai forse un giorno il voto passerà e risparmierai l'intero incubo di cambiare i casi nelle tue applicazioni fatte un paio di anni fa che richiedono l'aggiornamento in PHP.
Spero che aiuti comunque.
Potrebbe essere troppo tardi, ma ...
Tutti lo sanno già qui: il motore PHP non si preoccupa del caso delle lettere.
E c'è il voto su PHP bugtracker, dove la maggioranza dice: "Sì, sono pro case sensetivity".
Ma sono contrario, perché nel mio framework MVC, chiamo l'azione del controller:
$currentController = new $controller($parameters);
$currentAction = $currentController->{$action}();
$ controller e $ action vengono presi dall'URL così com'è.
Pensa, se un utente pubblica un collegamento al mio sito: https: // my-site / MyPartnerController / MyPartnerGallery
mentre la classe è denominata myPartnerController ...
Significa che nessuno guadagna mai questa pagina se i nomi delle classi e delle funzioni di PHP fanno distinzione tra maiuscole e minuscole.
Sì, utilizzo sempre tutti i nomi nel codice come dichiarato. Ma prego che non facciano mai distinzione tra maiuscole e minuscole per i nomi delle funzioni e delle classi.
Grazie!