Table des matières
Importations multiples" >L'espace de noms est utilisé plus souvent, non écrit en détail, enregistrant plusieurs pratiques et détails remarquables. Importations multiples
Je n'ai pas compris les traits avant d'apprendre laravelframework" >Je n'ai pas compris les traits avant d'apprendre laravelframework
, le générateur ne sait jamais quelle est la prochaine valeur sur laquelle itérer, et il n'y a aucun moyen de revenir en arrière ou d'avancer rapidement dans le générateur. Plus précisément, regardez les deux exemples suivants : " >requête, le générateur ne sait jamais quelle est la prochaine valeur sur laquelle itérer, et il n'y a aucun moyen de revenir en arrière ou d'avancer rapidement dans le générateur. Plus précisément, regardez les deux exemples suivants :
7. 内置的HTTP服务器
Maison développement back-end tutoriel php Comprenez-vous vraiment le PHP actuel ?

Comprenez-vous vraiment le PHP actuel ?

Apr 04, 2017 pm 03:59 PM
php

Il y a quelque temps, le projet de l'entreprise a été mis à niveau de PHP5.3 vers PHP7. Maintenant, le projet commence à utiliser certaines des nouvelles syntaxes et fonctionnalités de PHP7. En repensant aux versions 5.4, 5.5 et 5.6 de PHP, je me sens un peu en manque de connaissances, j'ai donc décidé de lire "Modern PHP" pour compléter certains concepts

. Lecture de ce livreComprenez-vous vraiment le PHP actuel ?
1. Caractéristiques

1.

Espace de noms

L'espace de noms est utilisé plus souvent, non écrit en détail, enregistrant plusieurs pratiques et détails remarquables. Importations multiples

Ne faites pas cela, c'est facile de semer la confusion
Suggérez une ligne d'utilisation :

<?php
use Symfony\Component\HttpFoundation\Request,
    Symfony\Component\HttpFoundation\Response,
    Symfony\Component\HttpFoundation\Cookie;
Copier après la connexion
Utiliser plusieurs espaces de noms dans un seul fichier

Vous pouvez le faire, mais cela viole
<?php
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Cookie;
Copier après la connexion
"Un fichier définit une classe" Bonne pratique pour

.
Espace de noms global Si vous souhaitez utiliser la classe

Exception
<?php
namespace Foo {
  //code
}

namespace Bar {
  //code 
}
Copier après la connexion
native de PHP, vous devez ajouter un symbole avant le nom de la classe

. S'il n'y a pas de symbole avant Exception, la classe Exception sera trouvée dans l'espace de noms MyApp
2 Utilisez l'interface

<?php
namespace My\App;

class Foo
{
  public function doSomething()
  {
    $exception = new \Exception();
  }
}
Copier après la connexion

Utilisez l'interface. plus flexible et peut être délégué à d'autres pour implémenter les détails. Les utilisateurs n'ont qu'à se soucier de l'interface et non de l'implémentation. Cela peut bien découpler le code et faciliter l'expansion

3. Traits

Je n'ai pas compris les traits avant d'apprendre laravelframework

C'est un nouveau concept introduit dans PHP5.4.0, mais c'est comme une classe et une interface

. 🎜>

Les traits sont des implémentations partielles de classes qui peuvent être mélangées dans une ou plusieurs classes PHP existantes

Pourquoi utiliser des traitsPour donner un exemple précis, par exemple, il existe deux classes, Car et Phone, qui nécessitent toutes deux la fonctionnalité GPS. Afin de résoudre ce problème, la première réaction est de créer une classe parent, puis de laisser

Hériter

Mais parce que évidemment. , cet ancêtre n'appartient pas à la hiérarchie d'héritage respective.

La deuxième réaction est de créer une interface GPS, de définir l'interface fonctionnelle GPS, puis de laisser les classes Car et Both Phone implémenter cette interface. tout en conservant la hiérarchie d'héritage naturelle. Cependant, cela nécessite des fonctions GPS en double dans les deux, ce qui n'est pas cohérent avec DRY (ne vous répétez pas La troisième réaction est de créer un trait qui implémente le principe). Fonction GPS, puis mélangez cette caractéristique dans les classes Voiture et Téléphone. Il peut réaliser des fonctions, n'affecte pas la structure d'héritage, ne répète pas l'implémentation et est parfait.
Créer et utiliser des traits

Créer des traits

Utiliser des traits


Générateur

<?php
trait MyTrait{
  //实现
}
Copier après la connexion

Le générateur PHP est une nouvelle fonctionnalité introduite dans PHP5.5.0, que de nombreux développeurs PHP ne comprennent pas. Le générateur est un simple itérateur, mais le générateur n'est pas obligé d'implémenter l'

interface Iterator
<?php
class MyClass
{
  use MyTrait;
  // 类的实现
}
Copier après la connexion
. Le générateur calcule et produit les valeurs à parcourir selon les besoins. Sans

requête, le générateur ne sait jamais quelle est la prochaine valeur sur laquelle itérer, et il n'y a aucun moyen de revenir en arrière ou d'avancer rapidement dans le générateur. Plus précisément, regardez les deux exemples suivants :

Générateur simple

Scénario spécifique : Utiliser le générateur pour traiter les fichiers CSV

Pour faire face à ce scénario, la méthode habituelle consiste d'abord à
<?php
function makeRange($length) {
  for ($i = 0; $i < $length; $i++) {
    yield $i;
  }
}

foreach (makeRange(1000000) as $i) {
  echo $i, PHP_EOL;
}
Copier après la connexion
lire tout le contenu du fichier

et à le placer dans le tableau, puis à effectuer le traitement et bientôt. Le problème avec ce type de traitement est le suivant :

Lorsque le fichier est très volumineux, il faut beaucoup de ressources mémoire pour le lire en une seule fois. Le générateur est le plus adapté à ce scénario car il occupe très peu de mémoire système
<?php
function getRows($file) {
  $handle = fopen($file, &#39;rb&#39;);
  if ($handle === false) {
    throw new Exception();
  }
  while (feof($handle) === false) {
    yield fgetcsv($handle);
  }
}

foreach (getRows(&#39;data.csv&#39;) as $row) {
  print_r($row);
}
Copier après la connexion
.

5. FermetureThéoriquement, la fermeture et la fonction anonyme sont des concepts différents. Cependant, PHP le traite comme le même concept.

Fermeture simple

Remarque : La raison pour laquelle nous pouvons appeler $closurevariable
est que la valeur de cette variable est une fermeture, et le Closure PackageObject implémente la méthode magique invoquée()

<?php
$closure = function ($name) {
  return sprintf(&#39;Hello %s&#39;, $name);
}

echo $closure("Beck");
// 输出 --> “Hello Beck”
Copier après la connexion
. Tant qu'il y a () après le

nom de la variable , PHP trouvera et appellera la méthode Invocation().

附加状态
使用use关键字可以把多个参数传入闭包,此时要像PHP函数或方法的参数一样,使用逗号分隔多个参数。

<?php
function enclosePerson($name) {
  return function ($doCommand) use ($name) {
    return sprintf(&#39;%s, %s&#39;, $name, $doCommand);
  };
}

// 把字符串“Clay”封装在闭包中
$clay = enclosePerson(&#39;Clay&#39;);

// 传入参数,调用闭包
echo $clay(&#39;get me sweet tea!&#39;);
// 输出 --> "Clay, get me sweet tea!"
Copier après la connexion

使用bindTo()方法附加闭包的状态
PHP框架经常使用bindTo()方法把路由URL映射到匿名回调函数上,框架会把匿名函数绑定到应用对象上,这么做可以在这个匿名函数中使用$this关键字引用重要的应用对象。例子如下:

<?php
class App
{
  protected $routes = array();
  protected $responseStatus = &#39;200 OK&#39;;
  protected $responseContentType = &#39;text/html&#39;;
  protected $responseBody = &#39;Hello world&#39;;

  public function addRoute($routePath, $routeCallback)
  {
    $this->routes[$routePath] = $routeCallback->bindTo($this, CLASS);//重点
  }

  public function dispatch($currentPath)
  {
    foreach ($this->routes as $routePath => $callback) {
      if ($routePath === $currentPath) {
        $callback();
      }
    }

    header('HTTP/1.1' . $this->responseStatus);
    header('Content-type:' . $this->responseContentType);
    header('Content-length' . mb_strlen($this->responseBody));
    echo $this->responseBody;
  }
}
Copier après la connexion

第11行是重点所在,把路由回调绑定到了当前的App实例上。这么做能在回调函数中处理App实例的状态:

<?php
$app = new App();
$app->addRoute('/users/josh', function () {
  $this->responseContentType = 'application/json;charset=utf8';
  $this->responseBody = '{"name": "Josh"}';
});
$app->dispatch('/users/josh');
Copier après la connexion

6. Zend OPcache

字节码缓存不是PHP的新特性,很多独立的扩展可以实现缓存。从PHP5.5.0开始,PHP内置了字节码缓存功能,名为Zend OPcache。

字节码缓存是什么
PHP是解释性语言,PHP解释器执行PHP脚本时会解析PHP脚本代码,把PHP代码编译成一系列Zend操作码,然后执行字节码。每次请求PHP文件都是这样,会消耗很多资源。字节码缓存能存储预先编译好的PHP字节码。这意味着,请求PHP脚本时,PHP解释器不用每次都读取、解析和编译PHP代码。这样能极大地提升应用的性能。

7. 内置的HTTP服务器

从PHP5.4.0起,PHP内置了Web服务器,这对众多使用Apache或nginx的php开发者来说,可能是个隐藏功能。不过,这个内置的服务器功能并不完善,不应该在生产环境中使用,但对本地开发来说是个便利的工具,可以用于快速预览一些框架和应用。

启动服务器

php -S localhost:4000
Copier après la connexion

配置服务器

php -S localhost:8000 -c app/config/php.ini
Copier après la connexion

路由器脚本
与Apache和nginx不同,它不支持.htaccess文件。因此,这个服务器很难使用多数流行的PHP框架中常见的前端控制器。PHP内置的服务器使用路由器脚本弥补了这个遗漏的功能。处理每个HTTP请求前,会先经过这个路由器脚本,如果结果为false,返回当前HTTP请求中引用的静态资源URI。

php -S localhost:8000 route.php
Copier après la connexion

是否为内置的服务器

<?php
if (php_sapi_name() === 'cli-server') {
  // php 内置的web服务器
}
Copier après la connexion

       

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 de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

Discuter de CakePHP Discuter de CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP est un framework open source pour PHP. Il vise à faciliter grandement le développement, le déploiement et la maintenance d'applications. CakePHP est basé sur une architecture de type MVC à la fois puissante et facile à appréhender. Modèles, vues et contrôleurs gu

Téléchargement de fichiers CakePHP Téléchargement de fichiers CakePHP Sep 10, 2024 pm 05:27 PM

Pour travailler sur le téléchargement de fichiers, nous allons utiliser l'assistant de formulaire. Voici un exemple de téléchargement de fichiers.

Comment configurer Visual Studio Code (VS Code) pour le développement PHP Comment configurer Visual Studio Code (VS Code) pour le développement PHP Dec 20, 2024 am 11:31 AM

Visual Studio Code, également connu sous le nom de VS Code, est un éditeur de code source gratuit – ou environnement de développement intégré (IDE) – disponible pour tous les principaux systèmes d'exploitation. Avec une large collection d'extensions pour de nombreux langages de programmation, VS Code peut être c

Guide rapide CakePHP Guide rapide CakePHP Sep 10, 2024 pm 05:27 PM

CakePHP est un framework MVC open source. Cela facilite grandement le développement, le déploiement et la maintenance des applications. CakePHP dispose d'un certain nombre de bibliothèques pour réduire la surcharge des tâches les plus courantes.

Comment analysez-vous et traitez-vous HTML / XML dans PHP? Comment analysez-vous et traitez-vous HTML / XML dans PHP? Feb 07, 2025 am 11:57 AM

Ce tutoriel montre comment traiter efficacement les documents XML à l'aide de PHP. XML (Language de balisage extensible) est un langage de balisage basé sur le texte polyvalent conçu à la fois pour la lisibilité humaine et l'analyse de la machine. Il est couramment utilisé pour le stockage de données et

Expliquez les jetons Web JSON (JWT) et leur cas d'utilisation dans les API PHP. Expliquez les jetons Web JSON (JWT) et leur cas d'utilisation dans les API PHP. Apr 05, 2025 am 12:04 AM

JWT est une norme ouverte basée sur JSON, utilisée pour transmettre en toute sécurité des informations entre les parties, principalement pour l'authentification de l'identité et l'échange d'informations. 1. JWT se compose de trois parties: en-tête, charge utile et signature. 2. Le principe de travail de JWT comprend trois étapes: la génération de JWT, la vérification de la charge utile JWT et l'analyse. 3. Lorsque vous utilisez JWT pour l'authentification en PHP, JWT peut être généré et vérifié, et les informations sur le rôle et l'autorisation des utilisateurs peuvent être incluses dans l'utilisation avancée. 4. Les erreurs courantes incluent une défaillance de vérification de signature, l'expiration des jetons et la charge utile surdimensionnée. Les compétences de débogage incluent l'utilisation des outils de débogage et de l'exploitation forestière. 5. L'optimisation des performances et les meilleures pratiques incluent l'utilisation des algorithmes de signature appropriés, la définition des périodes de validité raisonnablement,

Programme PHP pour compter les voyelles dans une chaîne Programme PHP pour compter les voyelles dans une chaîne Feb 07, 2025 pm 12:12 PM

Une chaîne est une séquence de caractères, y compris des lettres, des nombres et des symboles. Ce tutoriel apprendra à calculer le nombre de voyelles dans une chaîne donnée en PHP en utilisant différentes méthodes. Les voyelles en anglais sont a, e, i, o, u, et elles peuvent être en majuscules ou en minuscules. Qu'est-ce qu'une voyelle? Les voyelles sont des caractères alphabétiques qui représentent une prononciation spécifique. Il y a cinq voyelles en anglais, y compris les majuscules et les minuscules: a, e, i, o, u Exemple 1 Entrée: String = "TutorialSpoint" Sortie: 6 expliquer Les voyelles dans la chaîne "TutorialSpoint" sont u, o, i, a, o, i. Il y a 6 yuans au total

See all articles