Heim >Backend-Entwicklung >PHP-Tutorial >PHP Master | 5 inspirierende (und nützliche) PHP -Snippets
Das Internet ist voll von verschiedenen Artikeln von "X PHP -Code -Snippets" -Typ. Warum müssen Sie einen weiteren Artikel schreiben? Der Grund ist einfach: Die meisten Code -Ausschnitte im Artikel sind mangelhaft. Es ist wirklich nicht lustig und praktisch. Dieser Artikel wird fünf praktische und interessante Ausschnitte von PHP -Code teilen und die Inspiration dahinter vorstellen. Hoffentlich werden Sie diese kreativen Code -Snippets dazu inspirieren, bessere und kreativere Code in Ihrer täglichen Programmierung zu schreiben. $_SERVER["REMOTE_ADDR"]
Schlüsselpunkte
fputcsv()
als Alternative zu CURL, um HTTP -Anforderungen zu ergeben und zu postieren. unpack()
file_get_contents
Der Autor betont die Bedeutung der Verwendung von PHP-integrierten Funktionen und Erstellen benutzerdefinierter Lösungen, um gemeinsame Aufgaben wie das Generieren von CSV-Daten oder automatisch Laden von Klassen auszuführen, wodurch die Codierungseffizienz und Kreativität verbessert werden können. Wir sehen oft einen solchen Code und versuchen, mehrdimensionale Array -Daten in CSV zu konvertieren:
Das Problem ist, dass jedes Element nicht korrekt entkommen wird und die Einbeziehung von Zitaten oder Kommas in einen einzelnen Wert einen Fehler bei der anschließenden Parsen von CSV -Daten verursachen kann. Es ist am besten, die integrierte-Funktion zu verwenden. Der folgende Code enthält die Logik der Erstellung von CSV -Ausgaben aus einem Datenarray. Es enthält optionale Parameter, die die Verwendung der Title -Spalte ermöglichen und ob das CSV direkt in den Browser aktualisiert oder die Ausgabe als Zeichenfolge zurückgegeben werden soll. Das Clevere daran ist, den Stream mit
zu verwenden, da die Funktion einen geöffneten Dateihandle zum Betrieb erfordert.<code class="language-php"><?php $csv = ""; foreach ($data as $row) { $csv .= join(",", $row) . "\n"; } echo $csv; ?></code>
fputcsv()
Mit der Funktion fputcsv()
wird die Erzeugung von CSV einfach und zuverlässig.
<code class="language-php"><?php function toCSV(array $data, array $colHeaders = array(), $asString = false) { $stream = ($asString) ? fopen("php://temp/maxmemory", "w+") : fopen("php://output", "w"); if (!empty($colHeaders)) { fputcsv($stream, $colHeaders); } foreach ($data as $record) { fputcsv($stream, $record); } if ($asString) { rewind($stream); $returnVal = stream_get_contents($stream); fclose($stream); return $returnVal; } else { fclose($stream); } } ?></code>
2
Autoload -Klassendateien sind üblich, aber Sie mögen möglicherweise nicht die aufgeblähten Autoloader mit Schwergewicht, die verschiedene PHP -Frameworks anbieten, oder Sie möchten nur Ihre eigenen Lösungen schreiben. Glücklicherweise können Sie Ihren eigenen minimalen Lader schreiben und trotzdem den PSR-0-Standard einhalten, der von der Arbeitsgruppe der PHP Standards angewendet wurde, die ich zum ersten Mal in meinem eigenen Blog demonstriert habe. Dieser Standard beschreibt nicht die Supportfunktionen (Registrierungsmethode, Konfigurationsoptionen usw.), die PSR-0-kompatible Autoloader bereitstellen müssen. Wenn die Klassendefinition automatisch im <vendor name>(<namespace>)</namespace></vendor>
-Modus ermittelt wird, ist sie psr-0 kompatibel. Außerdem wird das übergeordnete Verzeichnis von <vendor name></vendor>
nicht angegeben. Die von den meisten Autoloadern implementierte zusätzliche "Füllungen" ist bequem, wenn Sie den Ort über Code angeben müssen. Es ist jedoch nicht erforderlich, wenn Sie nur Verzeichnisse verwenden, die bereits in PHP -Pfad enthalten sind.
<code class="language-php"><?php $csv = ""; foreach ($data as $row) { $csv .= join(",", $row) . "\n"; } echo $csv; ?></code>Das Clevere ist hier der reguläre Ausdruck, der den übergaberen Namen in seine Komponenten aufteilt. Diese Teile müssen identifiziert werden, da Unterstriche in den Namespace -Teilen keine besondere Bedeutung haben. Daher ist der blinde Austausch von Unterstrichen und Backslashes falsch.
$match[2]
$match[1]
3.
In Sprachen wie C sind Daten mit fester Länge relativ einfach zu verarbeiten, da sie nach dem Laden in den Speicher perfekt mit der Zugriffsdatenstruktur ausgerichtet sind. Für einige Personen kann die Verarbeitung von Daten mit fester Länge in dynamischen Sprachen wie PHP jedoch ein Kampf sein. Daher sehen wir oft Code wie folgt:
Sie können sich unwohl fühlen. Das ist in Ordnung, ich möchte auch in meiner Anwendung keinen solchen Code verwenden! Es ist langwierig und Indizes neigen für Fehler. Glücklicherweise gibt es eine bessere Alternative:
.Die Dokumentation in der
<code class="language-php"><?php function toCSV(array $data, array $colHeaders = array(), $asString = false) { $stream = ($asString) ? fopen("php://temp/maxmemory", "w+") : fopen("php://output", "w"); if (!empty($colHeaders)) { fputcsv($stream, $colHeaders); } foreach ($data as $record) { fputcsv($stream, $record); } if ($asString) { rewind($stream); $returnVal = stream_get_contents($stream); fclose($stream); return $returnVal; } else { fclose($stream); } } ?></code>im PHP -Handbuch heißt: "Binäre Zeichenfolgen in Arrays entsprechend dem angegebenen Format entpacken" und zeigt ein Beispiel für die Verwendung von Binärdaten -Flucht. Was möglicherweise nicht sofort offensichtlich ist, ist, dass da der Formatspezifizierer "a" Zeichen bedeutet (schließlich ist eine Zeichenfolge nicht nur eine Reihe von Bits und Bytes?), Mit dieser Funktion kann diese Funktion verwendet werden, um Saiten mit fester Länge zu analysieren.
unpack()
Mit
unpack()
6 Zeichen analysieren und sie als unpack()
zur Verfügung stellen.
<code class="language-php"><?php spl_autoload_register(function ($classname) { $classname = ltrim($classname, "\"); preg_match('/^(.+)?([^\]+)$/U', $classname, $match); $classname = str_replace("\", "/", $match[1]) . str_replace(["\", "_"], "/", $match[2]) . ".php"; include_once $classname; }); ?></code>
4
In der PHP -Community gab es nicht viel Konsens über die Templatisierung. Wir alle sind uns einig, dass es wünschenswert ist, HTML und PHP zu trennen, aber es gibt einen Konflikt um die Anwendbarkeit der Verwendung von Vorlagenbibliotheken wie Smarty oder Twig. Einige Leute weisen darauf hin, dass PHP selbst eine Template -Engine ist und sich der Geschwindigkeit, der Syntax usw. der Bibliothek widersetzt. Andere behaupten, stark von der Verwendung von DSL zu profitieren, die vom Vorlagensystem bereitgestellt werden. Ein Kompromiss besteht darin, Ihr HTML mit sehr kleinen Klassen in PHP zu unterteilen, um Ihren Code präzise zu halten.
<code class="language-php"><?php $csv = ""; foreach ($data as $row) { $csv .= join(",", $row) . "\n"; } echo $csv; ?></code>
Es handelt sich nicht um eine ausgereifte Template -Engine. Zunächst erstellen Sie in der Ansicht eine Instanz der Template
-Klasse. Anschließend wird der Wert, der mit der Vorlage gefüllt werden sollte, der set()
-Methode oder als nacktes Attribut zur Verfügung gestellt. Sobald alle Werte angegeben sind, können Sie die Methode out()
aufrufen, um die Vorlage zu rendern.
<code class="language-php"><?php function toCSV(array $data, array $colHeaders = array(), $asString = false) { $stream = ($asString) ? fopen("php://temp/maxmemory", "w+") : fopen("php://output", "w"); if (!empty($colHeaders)) { fputcsv($stream, $colHeaders); } foreach ($data as $record) { fputcsv($stream, $record); } if ($asString) { rewind($stream); $returnVal = stream_get_contents($stream); fclose($stream); return $returnVal; } else { fclose($stream); } } ?></code>Die
-Beispiel -Datei kann so folgendermaßen aussehen: mytemplate.php
<code class="language-php"><?php spl_autoload_register(function ($classname) { $classname = ltrim($classname, "\"); preg_match('/^(.+)?([^\]+)$/U', $classname, $match); $classname = str_replace("\", "/", $match[1]) . str_replace(["\", "_"], "/", $match[2]) . ".php"; include_once $classname; }); ?></code>In der Vorlagendatei können Sie auf den gesamten Bereich der PHP -Funktionen zugreifen, um Werte, Filterwerte usw. nach Bedarf zu formatieren.
Der zweite optionale Parameter von
kann angeben, dass der Vorlageninhalt als Zeichenfolge zurückgegeben wird, anstatt ihn direkt in den Browser zu aktualisieren. Sie können das Ergebnis einer zuvor ausgefüllten Vorlage ersetzen. out()
5. curl ist eine leistungsstarke Bibliothek zur Kommunikation über verschiedene Protokolle. Es ist wirklich sehr mächtig und manchmal gibt es keinen anderen Weg, es zu tun. Wenn Sie die von Curl ausgesetzte Funktionalität ausdrücklich benötigen, um Ihre Aufgaben zu erledigen, verwenden Sie Curl! Der größte Teil der täglichen Curl-Verwendung in PHP dreht sich jedoch darum, HTTP-Anfragen zu erhalten und zu postieren, die mithilfe von PHP-integrierten Funktionen problemlos ausgeführt werden können.
Es gibt zwei Probleme, wenn man sich auf Curl verlassen kann, um HTTP -Anforderungen auszustellen: 1) Es gibt oft viele Optionen, die auch für die einfachsten Transaktionen eingerichtet werden können, und 2) Es ist eine Erweiterung, die abhängig von Ihrer Hosting und Installation auch möglicherweise auch nicht verfügbar sein.
und
sind zwei native PHP -Funktionen, die seit Version 4.3 verfügbar sind. In Verbindung können sie viele Anfragen des gleichen Typs wie die Curl durchführen, die normalerweise ausgeführt werden.
file_get_contents()
Für grundlegende Get -Anfragen können Sie stream_context_create()
selbst verwenden:
file_get_contents()
Für Anfragen, bei denen HTTP -Header angegeben werden müssen (unabhängig davon, ob es sich um oder eine andere HTTP -Methode handelt), können Sie einen Kontext erstellen, indem Sie ein spezielles Schlüsselarray an
<code class="language-php"><?php // 解析NACHA报头记录 $row = fread($fp, 94); $header = array(); $header["type"] = substr($row, 0, 1); $header["priority"] = substr($row, 1, 2); $header["immDest"] = substr($row, 3, 10); $header["immOrigin"] = substr($row, 13, 10); $header["date"] = substr($row, 23, 6); $header["time"] = substr($row, 29, 4); $header["sequence"] = substr($row, 33, 1); $header["size"] = substr($row, 34, 3); $header["blockFactor"] = substr($row, 37, 2); $header["format"] = substr($row, 39, 1); $header["destName"] = substr($row, 40, 23); $header["originName"] = substr($row, 63, 23); $header["reference"] = substr($row, 86, 8); print_r($header); ?></code>übergeben.
stream_context_create()
file_get_contents()
Das obige Beispiel zeigt die Buchstaben, die zum Hochladen von Dateien per Post, Kontext -Arrays erforderlich sind
<code class="language-php"><?php // 解析NACHA报头记录 $row = fread($fp, 94); $header = unpack("A1type/A2priority/A10immDest/A10immOrigin/" . "A6date/A4time/A1sequence/A3size/A2blockFactor/A1format/" . "A23destName/A23originName/A8reference", $row); print_r($header); ?></code>
Erstellen Sie bei file_get_contents()
für komplexe Anforderungen (z. B. Uploads Datei -Uploads) zuerst ein Mock -Webformular und führen Sie es über Firefox oder ähnliche Tools mit aktiviertem Firebug aus und überprüfen Sie, was in der Anforderung enthalten ist. Von dort aus können Sie die wichtigen Header -Elemente schließen, die Sie einschließen sollten.
Zusammenfassung
Ich hoffe, Sie finden den in diesem Artikel eingeführten Code -Snippet interessant. Sie zeigen kreative Problemlösungen und verwenden die integrierten Funktionen von PHP für neue Effekte. Ich hoffe, Sie finden sie nützlich und inspirierend. Wenn Sie Ihren eigenen inspirierenden Code -Snippet haben, können Sie es in den Kommentaren unten teilen.
(Bild aus Fotolien)
(FAQ über PHP -Code -Snippets)
(Der FAQ -Teil wird hier weggelassen, da der Inhalt des ursprünglichen FAQ -Teils wenig mit dem Code -Snippet selbst zu tun hat und eine ergänzende Beschreibung ist. Sie können es selbst nach den tatsächlichen Anforderungen hinzufügen oder selbst ändern.)
Das obige ist der detaillierte Inhalt vonPHP Master | 5 inspirierende (und nützliche) PHP -Snippets. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!