Maison >développement back-end >tutoriel php >PHP Master | 5 Extraits PHP inspirants (et utiles)
Internet est plein de différents articles de type "Extraits de code X PHP", pourquoi avez-vous besoin d'écrire un autre article? La raison est simple: la plupart des extraits de code de l'article sont terne. La génération de chaînes aléatoires ou le retour $_SERVER["REMOTE_ADDR"]
pour obtenir des fragments comme les adresses IP du client n'est vraiment pas amusante et pratique. Cet article partagera cinq extraits pratiques et intéressants du code PHP et présentera l'inspiration derrière eux. J'espère que ces extraits de code créatifs vous inspireront à écrire un code mieux et plus créatif dans votre programmation quotidienne.
Points clés
fputcsv()
intégrée pour générer des données CSV, en utilisant la norme PSR-0 pour charger automatiquement la classe, en utilisant la fonction unpack()
pour analyser la longueur fixe Les données et l'utilisation d'une classe PHP simple font des modèles HTML et utilisent file_get_contents
comme alternative à Curl pour émettre des demandes HTTP Get et Post. 1. Nous voyons souvent du code comme celui-ci, essayant de convertir des données de tableau multidimensionnelles en CSV:
Le problème est que chaque élément n'est pas échappé correctement, et l'inclusion de devis ou de virgules dans une seule valeur peut entraîner une erreur dans l'analyse ultérieure des données CSV. Il est préférable d'utiliser la fonction
<code class="language-php"><?php $csv = ""; foreach ($data as $row) { $csv .= join(",", $row) . "\n"; } echo $csv; ?></code>intégrée; Le code suivant résume la logique de la construction de la sortie CSV à partir d'un tableau de données. Il contient des paramètres facultatifs qui permettent l'utilisation de la colonne de titre, et s'il faut actualiser le CSV directement dans le navigateur ou renvoyer la sortie sous forme de chaîne. La chose intelligente à ce sujet est d'utiliser le flux avec
, car la fonction nécessite une poignée de fichier ouverte pour fonctionner. fputcsv()
fputcsv()
<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>, la génération de CSV devient simple et fiable.
toCSV()
Les fichiers de classe AutoloAD sont courants, mais vous n'aimez peut-être pas ces autoloaders de poids lourds gonflées que divers cadres PHP offrent, ou vous aimerez peut-être simplement rédiger vos propres solutions. Heureusement, vous pouvez écrire votre propre chargeur minimal tout en vous conformant à la norme PSR-0 adoptée par le groupe de travail PHP Standards, que j'ai démontré pour la première fois sur mon propre blog. Cette norme ne décrit pas les fonctions de support (méthode d'enregistrement, options de configuration, etc.) que les autoloaders compatibles PSR-0 doivent fournir. S'il peut trouver automatiquement la définition de classe en mode <vendor name>(<namespace>)</namespace></vendor>
, alors il est compatible PSR-0. De plus, il ne spécifie pas le répertoire parent de <vendor name></vendor>
. Le "remplissage" supplémentaire implémenté par la plupart des auto -aders est pratique si vous devez spécifier l'emplacement via le code, mais ce n'est pas nécessaire si vous utilisez simplement les répertoires déjà dans PHP Inclut Path.
<code class="language-php"><?php $csv = ""; foreach ($data as $row) { $csv .= join(",", $row) . "\n"; } echo $csv; ?></code>La chose intelligente ici est l'expression régulière, qui divise le nom passé dans ses composants; Ces pièces doivent être identifiées car les soulignements n'ont pas de signification particulière dans les pièces de l'espace de noms, donc le remplacement aveugle des soulignements et des barreaux est incorrecte.
$match[2]
$match[1]
3.
Dans les langages tels que C, les données de longueur fixe sont relativement faciles à traiter car une fois chargés dans la mémoire, il sera parfaitement aligné avec la structure des données d'accès. Mais pour certaines personnes, le traitement des données de longueur fixe dans les langages dynamiques tels que PHP peut être difficile; Par conséquent, nous voyons souvent du code comme ceci:
Vous pouvez vous sentir mal à l'aise. C'est OK, je ne veux pas non plus utiliser de code comme celui-ci dans mon application! Il est long et les index sont sujets aux erreurs. Heureusement, il existe une meilleure alternative:
.La documentation dans le
<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>dans le manuel PHP indique: "déballer les chaînes binaires dans les tableaux en fonction du format donné" et montre un exemple d'utilisation de l'utilisation de l'évasion des données binaires. Ce qui peut ne pas être immédiatement évident, c'est que puisque le spécificateur de format "A" signifie des caractères (après tout, une chaîne n'est pas seulement une série de bits et d'octets?), Cette fonction peut être utilisée pour analyser les chaînes de longueur fixe.
unpack()
En utilisant
unpack()
analysera 6 caractères et les fournira comme unpack()
.
<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.
Dans la communauté PHP, il n'y a pas eu beaucoup de consensus sur les modèles. Nous convenons tous qu'il est souhaitable de séparer le HTML et le PHP, mais il y a un conflit sur l'applicabilité d'utiliser des bibliothèques de modèles telles que Smarty ou Twig. Certaines personnes soulignent que PHP lui-même est un moteur de modèle et s'oppose à la vitesse, à la syntaxe, etc. de la bibliothèque. D'autres prétendent grandement bénéficier de l'utilisation du DSL fourni par le système de modèle. Un compromis consiste à modèle votre HTML avec de très petites classes écrites en PHP pour garder votre code concis.
<code class="language-php"><?php $csv = ""; foreach ($data as $row) { $csv .= join(",", $row) . "\n"; } echo $csv; ?></code>
Ce n'est pas un moteur de modèle mature; il s'agit d'une classe auxiliaire soignée qui agit comme un "godet" qui collecte des paires de données de clé / valeur auxquelles vous pouvez accéder dans les fichiers inclués spécifiés comme modèles. Tout d'abord, vous créez une instance de la classe Template
dans la vue, et vous pouvez choisir de passer un nom de répertoire pour trouver des fichiers de modèle ultérieurs (vous permettant de regrouper des fichiers pertinents). Ensuite, la valeur qui doit être remplie du modèle est fournie à la méthode set()
ou en tant qu'attribut nu. Une fois toutes les valeurs spécifiées, vous pouvez appeler la méthode out()
pour rendre le modèle.
<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>Le fichier
l'exemple mytemplate.php
peut ressembler à ceci:
<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>
Dans le fichier de modèle, vous pouvez accéder à la plage complète des fonctions PHP pour formater les valeurs, les valeurs de filtre, etc. au besoin.
Le deuxième paramètre facultatif de out()
peut spécifier que le contenu de modèle est renvoyé sous forme de chaîne au lieu de le rafraîchir directement au navigateur, vous pouvez l'utiliser pour remplacer le résultat d'un modèle précédemment rempli.
5. Curl est une bibliothèque puissante pour communiquer sur divers protocoles. C'est vraiment très puissant et parfois il n'y a pas d'autre moyen de le faire. Si vous avez explicitement besoin des fonctionnalités exposées par Curl pour accomplir vos tâches, utilisez Curl! Cependant, la majeure partie de l'utilisation quotidienne de la boucle en PHP tourne autour de la fabrication de demandes HTTP Get et Post, ce qui peut être facilement effectué en utilisant des fonctions intégrées PHP.
Il y a deux problèmes avec le fait de s'appuyer sur Curl pour émettre des demandes HTTP: 1) Il existe souvent de nombreuses options à configurer même pour les transactions les plus simples, et 2) c'est une extension qui, selon votre hébergement et votre installation, peut également être disponible.
et
sont deux fonctions PHP natives qui sont disponibles depuis la version 4.3. En conjonction, ils peuvent effectuer de nombreuses demandes du même type que la Curl fonctionne généralement. file_get_contents()
stream_context_create()
Pour les demandes de base de base, vous pouvez utiliser
file_get_contents()
<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>puis transmettre le contexte à
. stream_context_create()
file_get_contents()
<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>
口.
Lorsque vous utilisez file_get_contents()
pour les demandes complexes (telles que les téléchargements de fichiers), créez d'abord un formulaire Web simulé et exécutez-le via Firefox ou outils similaires avec Firebug activé, puis vérifiez ce qui est inclus dans la demande peut être un peu utile. De là, vous pouvez déduire les éléments d'en-tête importants à inclure.
Résumé
J'espère que vous trouverez l'intérêt de l'extrait de code introduit dans cet article. Ils mettent en valeur la résolution créative de problèmes et l'utilisation des capacités intégrées de PHP pour de nouveaux effets. J'espère que vous les trouverez utiles et inspirants. Si vous avez votre propre extrait de code inspirant, n'hésitez pas à le partager dans les commentaires ci-dessous.
(image de Fotolia)
(FAQ sur les extraits de code PHP)
(La partie FAQ est omise ici parce que le contenu de la partie FAQ d'origine n'a pas grand-chose à voir avec l'extrait de code lui-même, et est une description supplémentaire. Vous pouvez l'ajouter ou le modifier vous-même en fonction des besoins réels.)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!