2008-08-30 20 views
11

Was ist eine gute Möglichkeit, den Code von den Anzeigeseiten bei der Entwicklung mit PHP zu entfernen. Oft müssen die Seiten, an denen ich arbeite, von einer externen Person bearbeitet werden. Diese Person wird oft von vielen PHP-Blöcken verwirrt und bricht auch gerne meinen Code.Best Practices für PHP?

Ich habe versucht, Code-Blöcke heraus in Funktionen zu bewegen, so dass jetzt gibt es Funktionen verteilen jetzt im gesamten HTML-out alle. Wenn einige Seiten komplexer werden, werden sie wieder zu Programmen, und die Verarbeitung von POSTs ist fraglich.

Was kann ich in meiner PHP-Entwicklung besser machen?

Antwort

19

Sie brauchen kein "System" für das Templating. Sie können es auf eigene Faust tun, indem Sie die Präsentation & Logik getrennt halten. Auf diese Weise kann der Designer das Display vermasseln, aber nicht die Logik dahinter.

Hier ist ein einfaches Beispiel:

<?php 
$people = array('derek','joel','jeff'); 
$people[0] = 'martin'; // all your logic goes here 
include 'templates/people.php'; 
?> 

Jetzt ist hier die people.php Datei (die Sie Ihren Designer geben):

<html> 
<body> 
<?php foreach($people as $name):?> 
    <b>Person:</b> <?=$name?> <br /> 
<?php endforeach;?> 
</body> 
</html> 
+0

Der Designer kann immer noch etwas vermasseln, es sei denn, Sie haben einige Maßnahmen an Ort und Stelle. Obwohl ich Smarty nicht sonderlich mag, ist seine Fähigkeit, die PHP-Nutzung Funktion für Funktion oder insgesamt einzuschränken, ein schönes Beispiel. Aber es ist wahr, dass zumindest die Arbeit des Designers einfacher wird, wenn Sie das Design trennen. –

0

Es gibt eine Menge, die zu diesem Thema gesagt werden kann, aber ein sehr einfacher Ausgangspunkt wäre, so viel Code wie möglich in separate Dateien zu verschieben und dann include-Anweisungen zu verwenden.

5

Sehen Sie sich an, wie einige der beliebten PHP-Frameworks Templating verwenden. Beispiele umfassen cakePHP, Zend Framework und Code Igniter. Selbst wenn Sie Ihre Site nicht auf diesen Frameworks basieren, ist das Template-Design-Muster eine gute Möglichkeit, PHP-Code von Ihren Web-Designern fernzuhalten, damit sie sich auf Layout und nicht auf Funktionalität konzentrieren können.

0

I umfasst in der Regel verwenden, wie sie für die Organisation und Gruppierungsfunktionen zusammen sehr nützlich sein können. Kommentiere auch deinen Code. Es gibt nichts Schlimmeres, als wenn jemand anders Ihre Arbeit sehen könnte und nicht weiß, warum Sie das getan haben. Benennen von Variablen und Funktionen können sinnvollerweise auch einen langen Weg gehen - zum Beispiel:

$userName = "John Doe"; 
$dateOfBirth = "04/02/1982"; 

function calculateUserAgeFromBirth($userName, $dateOfBirth) 

Naming Variablen wie dies hilft auch Kommentare zu minimieren über was Ihren Code tatsächlich tut.

2

Ist die außerhalb Person brauchen, die Logik, oder einfach nur die Anzeige (HTML) bearbeiten?

Wenn es der letzte Fall ist, überprüfen Sie die Smarty Vorlage-Engine.

1

Ich glaube, ich von einem unweildy weg bleiben möchte Rahmen. Nur ein Ansatz, den ich verwenden kann, der die Seiten im Allgemeinen mit saubereren Code lesbarer macht.

Stack-Überlauf will, dass ich die Antwort entscheiden, am besten ist, wenn am besten eine subjektive Meinung. Wer soll sagen, was die "beste" Praxis ist?

1

Wenn Sie sich entscheiden, weiterhin Funktionen zu verwenden, können Sie sich von WordPress inspirieren lassen. Sie können das "Programm" wahrscheinlich auf ein Minimum reduzieren, indem Sie die Vorlagen detaillierter gestalten.

Auch gute Werkzeuge (z. B. HTML-Editoren) können Designern helfen, PHP zu ignorieren und am Entwurf zu arbeiten, ohne den Code zu brechen. (Aber ich habe keine Vorschläge, tut mir leid.) Der andere Weg zu einigen Sachen ist, eigenes Schablonensystem anstelle von SMARTY zu verursachen, aber es würde wahrscheinlich zu lange dauern, ein Arbeitssystem zu schaffen, um Ihre Bedürfnisse zu befriedigen, die nur etwas ersetzen würden, wie %% VARIABLE%. % mit einem Text.

Unser Unternehmen verwendet SMARTY und sogar mit viel Code in Vorlagen, Designer wissen, wie man damit arbeitet. Für einfache CMS-Sites verwenden wir ExpressionEngine, die HTML-ähnliche Tags zum Einfügen von Logik in Templates verwendet.

4

Es klingt für mich wie Sie müssen beginnen zu implementieren, was als "Trennung von Bedenken" über Ihre Anwendung allgemein bekannt ist. Die Beispiele, die Leute über Templates halten, sind als Reaktion auf Ihre spezifische Beschwerde über Seiten-Editoren, die Ihren Code brechen, wichtig, aber stellen nur ein Beispiel für diese Taktik dar. Wenn Ihr Programm größer und komplexer wird, wird es schwieriger zu modifizieren und zu debuggen - selbst wenn Ihr Designer Ihren Code nicht bricht.

Die häufigste Trennung ist eine dreifache Aufteilung zwischen Daten, Logik und Darstellung, wie im Designmuster Model-View-Controller (MVC) beschrieben. Sie benötigen kein vollständiges MVC Framework, um dieselben Grundprinzipien zu implementieren. Die Idee besteht einfach darin, Code, der sich mit Ihren Daten (Modell) beschäftigt, an einem Ort zu kapseln, der Code, der diese Daten dem Benutzer (Ansicht) in einem anderen darstellt. Sie binden diesen Code zusammen mit Code, der nur darauf abzielt, die richtigen Daten zum richtigen Zeitpunkt dem richtigen Benutzer zu präsentieren (Controller).

Von Ihrer Beschreibung, es klingt wie Sie haben, ist jetzt ein Transaction Script Muster, wo Sie eine PHP-Datei "dothis.php" haben, die im Browser geladen wird, und alle Funktionsdefinitionen und HTML für die Anzeige zusammen sind . Sie haben bereits Funktionen, so dass Sie bereits damit beginnen, Teile der Logik zu kapseln. Die Art, wie ich das angehen würde, wäre, im Einklang mit den anderen Antworten hier über Templating, das gesamte HTML in eine andere Datei zu entfernen, die nur einfache PHP-Variablen und vielleicht einige Schleifen referenziert (aber so wenig bedingtes Umschalten wie du) kann). Dadurch wird die Vorlage leichter lesbar und schwerer zu knacken. Wenn Ihr Seiteneditor das Layout ändern möchte, geben Sie ihm DIESE Datei.

Sie trennen dann alle Ihre Datenzugriffsfunktionen in eine andere Datei und erstellen idealerweise eine Klasse (oder mehrere Klassen, abhängig davon, wie komplex Ihre Daten sind und wie häufig Sie sie wiederverwenden müssen).

An diesem Punkt wurde Ihre "dothis.php" bis auf einige Konfigurations-Code (die Sie zu einem Include trennen können, und einige Authentifizierungs-Code (die Sie in seine eigene Klasse trennen können), und ist nur Aufruf der Datenzugriffsfunktionen und Aufruf der inkludierten Vorlagendatei Ihr Controller selbst ist daher stark vereinfacht und einfacher zu managen

2

Ich würde Ihnen wärmstens empfehlen, das Buch PHP In Action zu lesen, das Sie durch Abstrahieren Ihrer Datenbankverbindungen, Templating-Systeme führt und alle anderen Grundlagen einer Web-Anwendung.Wenn jeder PHP-Entwickler dieses Buch lesen würde, dann hätte die Sprache einen viel besseren Ruf.

Es enthält auch Kapitel über Refactoring, Komponententests und das MVC-Kontrollmuster.