Utilizzo delle funzioni php, parole riservate come identificatori locali [chiuso]

6

Sto pensando ad alcune funzioni dell'array. "chiave", "ciascuno", "pos", "intervallo". Questi sono spesso molto utili come identificatori locali! Ho anche visto il codice che (ab) usa $ return, $ list, $ array, $ string. Quali sono le altre visualizzazioni dei programmatori PHP su questo?

Solo identificatori locali! Non li userei come membri o nomi di metodi di una classe, anche meno variabili globali.

    
posta Emanuel Landeholm 09.03.2012 - 01:06
fonte

5 risposte

5

La ragione per cui mi infastidiscono non è perché sono parole riservate all'interno del linguaggio stesso, ma piuttosto che sono troppo generali. Cosa contiene $array ? Di cosa si tratta?

$list, $string, $array, $key, etc è di gran lunga troppo generico e non sufficientemente descrittivo per essere utile. Soprattutto quando esegui il debug del codice di qualcun altro.

Anche nel contesto delle variabili locali, avere nomi di variabili più descrittivi renderebbe la comprensione di ciò che il codice sta facendo molto più velocemente.

    
risposta data 09.03.2012 - 19:04
fonte
1

Dal tuo punto di vista può sembrare che abbiano rubato i tuoi nomi di simboli preferiti - e in molte occasioni questo può essere detto per la maggior parte dei linguaggi di programmazione. Tuttavia, dal punto di vista di un esperto sviluppatore PHP, questi simboli sono una solida base su cui basarsi per produrre codice con un comportamento ben definito - almeno nella misura in cui queste funzioni hanno un comportamento ben definito.

Personalmente ritengo molto spiacevole che lo spazio riservato alle parole di PHP sia esteso con tante parole comuni, ma questa decisione è stata fatta bene nel passato, e quindi è ora parte del linguaggio sia reale che concettuale vocabolario, più o meno.

Oltre a ciò, penso che la programmazione riguardi tanto le istruzioni di codifica quanto la scrittura, specialmente dato che altri programmatori potrebbero aver bisogno di rivedere e mantenere il tuo codice, e che tu stesso potresti dimenticare quel particolare pezzo di codice che potrebbe aver scritto qualche mese fa. In questo filone, i simboli ben denominati aumentano immensamente la leggibilità del tuo codice e, per estensione, aiutano tutti quelli che ci lavorano.

Potrebbe essere necessario un po 'più di lavoro e creatività, ma non c'è niente di più gratificante di un pezzo di codice elaborato con cura che può essere letto e compreso con il minimo sforzo.

    
risposta data 09.03.2012 - 02:11
fonte
1

Usare nomi come $ key, $ value e $ list è una pratica molto comune quando si itera la matrice in modo che possa essere vista come parte del modo PHP.

Una nuova cosa da considerare. Sebbene non sia ampiamente utilizzato in PHP, il linguaggio ha supportato una forma di chiusura / funzione anonima dal 5.3. Poiché le funzioni possono quindi essere assegnate alle variabili, sarebbe sensato evitare alcune delle combinazioni più confuse.

Ad esempio, gli sviluppatori di nodi useranno spesso "next" per una funzione di ritorno che è un metodo array esistente. Allo stesso modo, se una chiusura termina con $ return (); invece di ritorno; che potrebbe anche confondere. Usare $ callback che non ha equivalenti sembrerebbe sicuro.

In generale, nomi come $ list, $ array, $ string o $ number, non dovrebbero essere usati ad eccezione dei loop più interni, in quanto riflettono solo il tipo piuttosto che lo scopo.

Per quanto riguarda i nomi dei metodi per una classe, se la classe ha comportamenti di tipo array sarebbe del tutto appropriato utilizzarli, o addirittura applicarla tramite le interfacce ArrayIterator o ArrayAccess.

    
risposta data 09.03.2012 - 02:23
fonte
1

Non vedo alcun problema con (ab) utilizzando identificatori come $key , $array , $return , ecc.

Il fatto è che $key non è lo stesso nome di simbolo di key() . $namespace non è uguale a namespace : non scrivono lo stesso e non significano lo stesso. Direi che questa è una bella funzionalità di PHP e anche di Perl.

Dimostra chiaramente la tua intenzione:

$string = 'yay';   // I'd be very surprised if referencing this returned a float

$array[] = 'baz';  // I know that it is an array, and not a ArrayAccess object, etc.

$key = 'bar';      // I know this refers to an array key, or a cache key, or more generally 
                   // some sort of unique identifier

$return = 'hello'; // I know this is going to be returned at some point
    
risposta data 09.03.2012 - 17:56
fonte
0

"key", "each", "pos", "range". These are often very useful as local identifiers!

Non sono d'accordo. Sono troppo generici come indicato da un'altra risposta. La variabile generica non è una buona variabile, a meno che il programma non sia di una pagina.

La cosa buona è che PHP permette loro di essere usati come variabili e non ti danno qualche strano errore come in .NET. Se php è abbastanza intellegente da sapere cos'è una variabile e cosa no, è una buona cosa.

Should I use it as variable or function names?

L'intero scopo di scrivere un buon codice è che dovrebbe essere pulito, facile da leggere e mantenere e con meno confusione. Si aggiungerebbe confusione se si utilizzano parole chiave riservate come nomi di variabili e nomi di funzioni. Mantenendo le tradizioni con altre lingue, è una cattiva pratica usare le parole chiave come nomi di variabili ecc. In breve, dovresti essere coerente, non usare parole chiave diverse dalle parole chiave (e anche rispettare altre lingue), ma se vuoi a, puoi.

Ecco un rapido programma che ho scritto che è forse possibile solo in PHP:)

<?
$n1= 2;
$n2= 5;

echo "The sum of $n1 and $n2 is ".addnumbers($n1,$n2);

function addnumbers($a, $b)
{
  $return = $a+$b;

  return $return;
}
?>
    
risposta data 09.03.2012 - 20:29
fonte

Leggi altre domande sui tag