Maison  >  Article  >  développement back-end  >  Brève analyse de l'application PHP SPL

Brève analyse de l'application PHP SPL

不言
不言original
2018-04-20 13:16:473009parcourir

Cet article présente principalement l'application PHP SPL et analyse les fonctions très importantes mais inconnues et les compétences opérationnelles associées de SPL sous forme d'exemples. Les amis dans le besoin peuvent s'y référer

Les exemples de cet article. décrire la méthode d'application PHP SPL. J'aimerais le partager avec vous pour votre référence. Les détails sont les suivants :

L'article ci-dessus de Rafael Dohms m'a tellement étonné que je n'ai pas pu m'empêcher de le traduire et d'ajouter du contenu en même temps. .

SPL, PHP Standard Library (Standard PHP Library), Composants et interfaces intégrés depuis PHP 5.0, et ont progressivement mûri depuis PHP5.3. SPL est en fait intégré à tous les environnements de développement PHP5 et ne nécessite aucune configuration.

Il semble que de nombreux développeurs PHP ne l’utilisent pas, ou n’en ont même pas entendu parler. La raison peut être attribuée à sa documentation semblable à de la neige, qui vous fait ignorer « son existence ». SPL Ce joyau ressemble au « Cœur de l'océan » du Titanic, qui a coulé au fond de la mer. Il convient désormais de le récupérer et de le porter à la place qui lui revient, et c'est le point de vue exprimé dans cet article.

Alors, Que propose SPL ?

SPL fournit des extensions au moteur PHP, telles que des interfaces telles que ArrayAccess, Countable et SeekableIterator , qui sont utilisées pour générer des données sous forme de tableau Objet d'opération. Dans le même temps, vous pouvez également utiliser d'autres itérateurs tels que RecursiveIterator et ArrayObejcts pour itérer les données.

Il possède également plusieurs objets intégrés tels que Exceptions, SplObserver, Spltorage et splautoloadregister, splclasses Les fonctions d'assistance de , iteratorapply , etc. sont utilisées pour surcharger les fonctions correspondantes.

Ces outils réunis sont comme un couteau suisse multifonctionnel. Faire bon usage d’eux peut améliorer qualitativement l’efficacité du code PHP. Alors, comment libérer sa puissance ?

Chargeur automatique de surcharge

Si vous êtes un "programmeur de manuels", alors vous êtes assuré de savoir comment utiliser __autoload pour remplacer inclut /requires fonctionne pour charger paresseusement la classe correspondante, n'est-ce pas ?

Mais avec le temps, vous constaterez que vous avez eu des ennuis. Tout d'abord, vous devez vous assurer que vos fichiers de classe doivent se trouver dans le chemin de fichier spécifié. Par exemple, dans le framework Zend, vous devez utiliser "_. " pour séparer les classes. Nom de la méthode (Comment résolvez-vous ce problème ?).

Un autre problème est qu'à mesure que le projet devient de plus en plus complexe, la logique au sein de __autoload deviendra également d'autant plus complexe. En fin de compte, vous ajouterez même un jugement d'exception et y écrirez toute la logique de chargement des classes.

Tout le monde sait que "les œufs ne peuvent pas être mis dans le même panier". SPL peut être utilisé pour séparer la logique de chargement de __autoload . Écrivez simplement votre propre fonction de chargement automatique et surchargez-la à l'aide des fonctions fournies par SPL.

Par exemple, dans le problème du framework Zend mentionné ci-dessus, vous pouvez surcharger la méthode correspondante du chargeur Zend. S'il ne trouve pas la classe correspondante, alors il utilisera la fonction que vous avez définie précédemment.


<?php
class MyLoader {
  public static function doAutoload($class) {
    // 本模块对应的 autoload 操作
  }
}
spl_autoload_register( array(&#39;MyLoader&#39;, &#39;doAutoload&#39;) );
?>


Comme vous pouvez le voir, spl_autoload_register peut également ajouter plusieurs logiques de chargement sous la forme d'un tableau. En même temps, vous pouvez également utiliser spl_autoload_unregister pour supprimer la logique de chargement qui n'est plus nécessaire. Cette fonctionnalité sera toujours utilisée.

Itérateur

L'itération est l'un des modèles de conception courants et est couramment utilisée pour les opérations de parcours unifiées dans un ensemble de données. Il n'est pas exagéré de dire que SPL fournit tous les itérateurs dont vous avez besoin pour les types de données correspondants.

Un très bon exemple est la traversée de répertoires. L'approche conventionnelle consiste à utiliser scandir , puis à ignorer "." et "..", ainsi que les autres fichiers qui ne remplissent pas les conditions. Par exemple, si vous devez parcourir un répertoire pour extraire des fichiers image, vous devez déterminer s'ils se terminent par jpg ou gif.

Le code suivant est un exemple d'utilisation de l'itérateur SPL pour effectuer la recherche récursive ci-dessus de fichiers image dans le répertoire spécifié :


<?php
class RecursiveFileFilterIterator extends FilterIterator {
  // 满足条件的扩展名
  protected $ext = array(&#39;jpg&#39;,&#39;gif&#39;);
  /**
   * 提供 $path 并生成对应的目录迭代器
   */
  public function __construct($path) {
    parent::__construct(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)));
  }
  /**
   * 检查文件扩展名是否满足条件
   */
  public function accept() {
    $item = $this->getInnerIterator();
    if ($item->isFile() &&
        in_array(pathinfo($item->getFilename(), PATHINFO_EXTENSION), $this->ext)) {
      return TRUE;
    }
  }
}
// 实例化
foreach (new RecursiveFileFilterIterator(&#39;/path/to/something&#39;) as $item) {
  echo $item . PHP_EOL;
}
?>


Vous pourriez vous demander : cela ne prend-il pas plus de code pour faire la même chose ? Alors, en regardant le code ci-dessus, n'avez-vous pas un code hautement réutilisable et testable :)

Voici d'autres itérateurs fournis par SPL :

RecursiveIterator
RecursiveIteratorIterator
OuterIterator
IteratorIterator
FilterIterator
RecursiveFilterIterator
ParentIterator
SeekableIterator
LimitIterator
Glob Itérateur
CachingIt érateur
RecursiveCachingIterator
NoreWindIterator
APPENDITERATOR
RecursiveIteratorotor
Infiniteiterator
ReGexiterator

Emptyitrator
RecursiveTreeiterator
ArrayIterator

Dans un premier temps, plus d'itérateurs sera intégré. Je pense que vous pouvez l'essayer. Peut-être que cela changera votre habitude d'écrire du code traditionnel.

SplFixedArray

SPL dispose également d'une série d'outils de manipulation de tableaux intégrés. Par exemple, vous pouvez utiliser SplFixedArray pour instancier un tableau de longueur fixe. Alors pourquoi l'utiliser ? Parce que c'est plus rapide, cela affecte même votre salaire :)

Nous savons que les tableaux réguliers PHP contiennent différents types de clés, comme des nombres, des chaînes, etc., et que la longueur est variable. C'est précisément à cause de ces "fonctionnalités avancées" que PHP utilise un hachage pour obtenir la valeur correspondante via la clé - en fait, cela peut entraîner des problèmes de performances dans certaines situations.

Étant donné que SplFixedArray utilise des touches numériques fixes, il n'utilise pas de stockage de hachage. Pas exactement, vous pouvez même le considérer comme un tableau C. C'est pourquoi SplFixedArray est plus rapide que les tableaux classiques (uniquement en PHP5.3).

À quelle vitesse est-il ? L'ensemble de données suivant peut vous en donner un aperçu.

Si vous avez besoin de beaucoup d'opérations sur les tableaux, vous pouvez l'essayer et je pense qu'il est digne de confiance.

Structure des données

Dans le même temps, SPL fournit également la mise en œuvre de certains types de base de structures de données. Bien que nous puissions utiliser des types de variables traditionnels pour décrire des structures de données, comme l'utilisation de tableaux pour décrire des piles (Strack) - puis utiliser les méthodes correspondantes pop et push (arraypop(), arraypush()), vous devez toujours être prudent , car Après tout, ils ne sont pas spécifiquement conçus pour décrire des structures de données - une seule mauvaise opération peut corrompre la pile.

L'objet SplStack de SPL décrit strictement les données sous forme de pile et fournit les méthodes correspondantes. Dans le même temps, un tel code devrait également être capable de comprendre qu'il fonctionne sur une pile plutôt que sur un tableau, permettant à vos pairs de mieux comprendre le code correspondant, et ce sera plus rapide.

Enfin, peut-être que les pâles exemples ci-dessus ne suffisent pas à vous « tenter » d’utiliser SPL. La pratique apporte de vraies connaissances et vous devez explorer vous-même des fonctions de plus en plus puissantes de SPL. Ce n’est que lorsqu’il est sculpté lentement comme une pierre précieuse qu’il peut rayonner de son éclat.





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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn