2010-05-05 9 views
5

Ich versuche, Best Practices zu finden, um PHP zu schreiben.PHP und sauberen Code schreiben

Ich frage mich nur, ist das eine schlechte Angewohnheit.

Zum Beispiel, Variablen verarbeiten.

$var = 1 
$var = doSomething($var); 
$var = doSomething2($var); 
$var = doSomething3($var); 

Es sieht ein bisschen schrecklich aus. Hier

ist ein Beispiel für einen echten Code, den ich gerade tat:

$this->rSum = explode(",", $this->options["rSum"]); 
$this->rSum = array_combine(array_values($this->rSum), array_fill(0, count($this->rSum), 0)); 

Wenn mir jemand ein paar gute Tutorials zu schreiben saubereren Code passieren könnte im Allgemeinen wäre es schön!

Ich habe wieder dumme Fragen gestellt. :)


By the way ..

Wie viel automatische Verarbeitung kann es in Modellen sein?

Ich habe ein Modell, das eine Execute-Methode hat und wenn ich es anrufe, tut es eine Menge Dinge wie das Lesen einer Definitionsdatei und das Ausführen von Datenbankabfragen.

Zum Beispiel

$object = new Object() 
$object->setFile("example.txt"); 
$object->execute(); 

// Then i can fetch things from it 
echo $object->getName(); 

Antwort

3

Ich mag wirklich Ihren (echten) Code und es ist normalerweise etwas schwer für mich, anderen Personen Code zu mögen (Ich hatte nicht viel Zeit, um in ZF zu graben, aber PEAR zum Beispiel [sie haben auch ihre Kodierungsstandards] ist einfach schrecklich IMO), das erste Beispiel, das Sie gaben, scheint nur dumm, aber in Bezug auf die zweite, es ist wirklich leicht zu verstehen, zumindest für mich und aus dem kurzen Ausschnitt, den Sie zur Verfügung gestellt haben Sie scheinen eine einheitliche Codierung Stil und verwenden Leerzeichen in der rechten Menge und an den richtigen Stellen - das zählt viel für sauberen Code (wenn Sie mir nicht glauben, werfen Sie einfach einen Blick auf einige Perl-Snippets).

Ich möchte nur drei Dinge hinweisen:

  1. Semantics: Obwohl rSum ist kein schrecklicher Name für eine Eigenschaft es ist nicht ganz klar ist, welche Werte nicht es halten, vielleicht könnten Sie finden ein beschreibender Name für diese Eigenschaft?
  2. Variable Reuse: Wie gesagt vor dem ersten Beispiel dumm scheint, aber es ist eigentlich intelligente Variablen aus zwei Gründen wieder zu verwenden:
    1. Sie haben keine Speicher verschwenden.
    2. Und Sie verschmutzen nicht den Umfang, mit dem Sie arbeiten.
  3. Ihr zweites "echtes" Beispiel könnte saubere und schneller sein, wenn Sie die richtigen Funktionen nutzen:

    $ this-> RSUM = array_flip (explode (“, "$ this-> Optionen [" rSum "]));

EDIT: Ich I nur den Code bemerkt oben angegebenen nicht ganz, was Sie tun (die 0 nicht durch mein Gehirn verarbeitet wurde), hier ist eine andere Arbeits Alternative:

$this->rSum = array_fill_keys(explode(",", $this->options["rSum"]), 0); 

Es scheint hier eine Menge Leute zu geben, die keine Einzeiler mögen, aber ich glaube, dass der obige Code klar, effizient und beschreibend ist - aber das mag nur ich sein ... =)

8

Smart Code ist meiner Meinung nach nicht unbedingt ein guter Code. Ich persönlich würde lieber sauberen, einfachen und leicht verständlichen Code bevorzugen. Ihr 2-Liner wird Ihren Peer denken lassen, im Gegensatz zu Ihrem init "schlechten" Code.

Das ist nur ohnehin Neben den Coding-Standards

+1

Peer, nicht Birne: P – Viet

3

mein nehmen ist, können Sie PHP_CodeSniffer verwenden, um allgemeine Hinweise auf Ihrem vorhandenen Code.

0

Vereinbart mit Jim Li, bevorzuge ich auch lesbaren Code über Mikro-Optimierung oder intelligente aber hässliche Ein-Liner-Code.

Das einzige Problem, das ich mit Ihrem ersten Beispiel hatte, ist, dass es prozessorientierte Funktionen verwendet, ich wäre besser umgeschrieben OOP (Funktionen Anrufe wie dies könnte verkettet werden und einfach zu lesen bleiben).

PHP hat kein starkes OOP-Ziel, da es in seiner API hauptsächlich prozedurale Anweisungen verwendet. Aber ich bevorzuge es, meinen Code in OO-Form zu schreiben, gut entkoppelt und organisiert, anstatt eine ganze Menge Funktionen mit vielen Argumenten zu haben, damit sie zusammen funktionieren.

-3

Eins Ding, das versucht, alles in einem zu tun Zeile kann zu Codeannahmen führen. Was ich als wirklich ärgerlich empfinde, wenn ich sie weiter reparieren muss. Dies ist häufiger bei der Verkettung von Objekten. Zum Beispiel

$object->getAnotherObject()->getAThirdObject()->doSomething(); 

Viele Leute werden Ihnen sagen, dass es einfacher zu lesen ist; Es beruht jedoch darauf, dass jede Rückgabe jedes Mal ein Objekt ist. Ich ziehe es vor, jeden zurückzugeben und die Antwort zu überprüfen.

Es braucht mehr Tastenanschläge, aber es wird weniger wahrscheinlich zu sprengen und, ich denke sowieso, einfacher zu lesen.

Obwohl es sich lohnt zu wiederholen, was Boris Guéry schrieb. konsistent sein.

+0

"Cleaner ?! Einfacher zu lesen ?!" Fluent Interfaces rocken, zum Beispiel eine SQL Builder Klasse: '$ sql-> select ('posts', 'title') -> wo (array ('user_id' => 5)) -> order ('datum', 'desc ') -> limit (10); ', mit Ihrem Ansatz würde dies 5 nutzlose Einrückungslevels erfordern, da in fließenden Interfaces alle Methoden das Objekt egal zurückgeben sollten. –

+0

Wenn Sie wissen, was zurück kommt, ist das in Ordnung. Wie wäre es, wenn Sie in ein Projekt springen und beim Code-Programm anfangen zu verstehen? Sie können nicht auf Best-Case-Szenarien basieren. Was passiert, wenn jemand einen Teil eines Projekts, an dem Sie gerade arbeiten, aktualisiert und stattdessen ein Array von Objekten zurückgibt? – Khainestar

+0

Was ist mit dem Demeter-Gesetz? –