Inhaltsverzeichnis
Tun Sie dies nicht, es ist leicht, die Leute zu verwirren
Schreiben Sie eine Verwendungserklärung: " >Schreiben Sie eine Verwendungserklärung:
Um dort zum Beispiel ein konkretes Beispiel zu nennen Es gibt zwei Klassen, Car und Phone, die beide GPS-Funktionen benötigen. Um dieses Problem zu lösen, besteht die erste Reaktion darin, eine übergeordnete Klasse zu erstellen und dann Car und Phone zu erben. Dieser Vorfahre gehört nicht zur jeweiligen Vererbungshierarchie. Die zweite Reaktion besteht darin, eine GPS-Schnittstelle zu erstellen, die GPS-Funktionsschnittstelle zu definieren und diese Schnittstelle dann von den Klassen Car und Both Phone implementieren zu lassen Beibehaltung der natürlichen Vererbungshierarchie erfordert jedoch doppelte GPS-Funktionen, was nicht mit dem DRY-Prinzip übereinstimmt. " >Um dort zum Beispiel ein konkretes Beispiel zu nennen Es gibt zwei Klassen, Car und Phone, die beide GPS-Funktionen benötigen. Um dieses Problem zu lösen, besteht die erste Reaktion darin, eine übergeordnete Klasse zu erstellen und dann Car und Phone zu erben. Dieser Vorfahre gehört nicht zur jeweiligen Vererbungshierarchie. Die zweite Reaktion besteht darin, eine GPS-Schnittstelle zu erstellen, die GPS-Funktionsschnittstelle zu definieren und diese Schnittstelle dann von den Klassen Car und Both Phone implementieren zu lassen Beibehaltung der natürlichen Vererbungshierarchie erfordert jedoch doppelte GPS-Funktionen, was nicht mit dem DRY-Prinzip übereinstimmt.
Eigenschaften erstellen und verwenden
den gesamten Inhalt der Datei zu lesen und ihn in das " >Um mit diesem Szenario umzugehen, besteht die übliche Methode darin, zunächst den gesamten Inhalt der Datei zu lesen und ihn in das
7. 内置的HTTP服务器
Heim Backend-Entwicklung PHP-Tutorial Verstehst du wirklich aktuelles PHP?

Verstehst du wirklich aktuelles PHP?

Apr 04, 2017 pm 03:59 PM
php

Vor einiger Zeit wurde das Projekt des Unternehmens von PHP5.3 auf PHP7 aktualisiert. Jetzt wird das Projekt verwendet Einige der neuen PHP7-Syntax und -Funktionen. Wenn ich auf die PHP-Versionen 5.4, 5.5 und 5.6 zurückblicke, habe ich das Gefühl, dass es mir etwas an Wissen mangelt, also habe ich beschlossen, „Modernes PHP“ zu lesen, um einige Konzepte zu ergänzen Buch

1. MerkmaleVerstehst du wirklich aktuelles PHP?
1. Namespace wird häufiger verwendet, nicht im Detail geschrieben, wobei mehrere bemerkenswerte Praktiken und Details aufgezeichnet werden

Mehrfachimporte

Tun Sie dies nicht, es ist leicht, die Leute zu verwirren

Schreiben Sie eine Verwendungserklärung:


Verwenden Sie mehrere Namespaces in einer Datei Sie können dies tun, aber dies verstößt gegen
„Eine Datei definiert eine Klasse“ Gute Vorgehensweise für

<?php
use Symfony\Component\HttpFoundation\Request,
    Symfony\Component\HttpFoundation\Response,
    Symfony\Component\HttpFoundation\Cookie;
Nach dem Login kopieren

Globaler Namespace
<?php
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Cookie;
Nach dem Login kopieren

Wenn Sie die native Klasse Exception von PHP verwenden möchten, müssen Sie vor dem Klassennamen ein Symbol hinzufügen
Falls vorhanden Ist kein Symbol vor Exception, wird die Exception-Klasse im MyApp-Namespace gefunden

<?php
namespace Foo {
  //code
}

namespace Bar {
  //code 
}
Nach dem Login kopieren
2. Verwenden Sie die Schnittstelle

Flexibel und kann an andere delegiert werden, um die Details zu implementieren, und nicht um die Implementierung. Dies kann nicht häufiger erwähnt werden
Ich habe Traits nicht verstanden, bevor ich das Laravel-Framework gelernt habe Dies ist ein neues Konzept, das in PHP5.4.0 eingeführt wurde, aber es ist wie eine Klasse und eine Schnittstelle. Es ist keines von beiden >

Traits sind Teilimplementierungen von Klassen, die in eine oder mehrere vorhandene PHP-Klassen eingemischt werden können
<?php
namespace My\App;

class Foo
{
  public function doSomething()
  {
    $exception = new \Exception();
  }
}
Nach dem Login kopieren

Warum Traits verwenden

Um dort zum Beispiel ein konkretes Beispiel zu nennen Es gibt zwei Klassen, Car und Phone, die beide GPS-Funktionen benötigen. Um dieses Problem zu lösen, besteht die erste Reaktion darin, eine übergeordnete Klasse zu erstellen und dann Car und Phone zu erben. Dieser Vorfahre gehört nicht zur jeweiligen Vererbungshierarchie. Die zweite Reaktion besteht darin, eine GPS-Schnittstelle zu erstellen, die GPS-Funktionsschnittstelle zu definieren und diese Schnittstelle dann von den Klassen Car und Both Phone implementieren zu lassen Beibehaltung der natürlichen Vererbungshierarchie erfordert jedoch doppelte GPS-Funktionen, was nicht mit dem DRY-Prinzip übereinstimmt.

Die dritte Reaktion besteht darin, ein Merkmal zu erstellen, das das GPS implementiert Funktion und mischen Sie diese Eigenschaft dann in die Klassen „Auto“ und „Telefon“. Es kann Funktionen realisieren, hat keinen Einfluss auf die Vererbungsstruktur, wiederholt keine Implementierung und ist perfekt.

Eigenschaften erstellen und verwenden

Eigenschaften erstellen

Eigenschaften verwenden

4. Generator
Der PHP-Generator ist eine neue Funktion, die in PHP5.5.0 eingeführt wurde und die viele PHP-Entwickler nicht verstehen. Der Generator ist ein einfacher Iterator, der Generator ist jedoch nicht erforderlich, um die Iterator-Schnittstelle

zu implementieren. Der Generator berechnet und erzeugt die Werte, über die nach Bedarf iteriert werden soll. Ohne

Abfragen

weiß der Generator nie, was der nächste Wert ist, über den iteriert werden soll, und es gibt keine Möglichkeit, im Generator zurückzu- oder vorzuspulen. Schauen Sie sich insbesondere die folgenden zwei Beispiele an:

Einfacher Generator

<?php
trait MyTrait{
  //实现
}
Nach dem Login kopieren
Spezifisches Szenario: Verwenden Sie den Generator, um CSV-Dateien zu verarbeiten

<?php
class MyClass
{
  use MyTrait;
  // 类的实现
}
Nach dem Login kopieren

Um mit diesem Szenario umzugehen, besteht die übliche Methode darin, zunächst den gesamten Inhalt der Datei zu lesen und ihn in das

Array

einzufügen und dann die Verarbeitung durchzuführen und bald. Das Problem bei dieser Art der Verarbeitung ist: Wenn die Datei sehr groß ist, nimmt das gleichzeitige Lesen viele Speicherressourcen in Anspruch. Der Generator ist für dieses Szenario am besten geeignet, da er nur sehr wenig Systemspeicher beansprucht. 5. Schließung

Theoretisch sind Schließung und anonyme Funktion unterschiedliche Konzepte. PHP behandelt es jedoch als dasselbe Konzept.

<?php
function makeRange($length) {
  for ($i = 0; $i < $length; $i++) {
    yield $i;
  }
}

foreach (makeRange(1000000) as $i) {
  echo $i, PHP_EOL;
}
Nach dem Login kopieren
Einfacher Abschluss

Hinweis: Der Grund, warum wir $closure
<?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);
}
Nach dem Login kopieren
Variable

nennen können, liegt darin, dass der Wert dieser Variablen ein Abschluss ist und der close PackageObject implementiert die invoke()magische Methode. Solange nach dem Variablennamen () steht, findet PHP die invoke()-Methode und ruft sie auf.

附加状态
使用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!"
Nach dem Login kopieren

使用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;
  }
}
Nach dem Login kopieren

第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');
Nach dem Login kopieren

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
Nach dem Login kopieren

配置服务器

php -S localhost:8000 -c app/config/php.ini
Nach dem Login kopieren

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

php -S localhost:8000 route.php
Nach dem Login kopieren

是否为内置的服务器

<?php
if (php_sapi_name() === 'cli-server') {
  // php 内置的web服务器
}
Nach dem Login kopieren

       

Das obige ist der detaillierte Inhalt vonVerstehst du wirklich aktuelles PHP?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

CakePHP Datum und Uhrzeit CakePHP Datum und Uhrzeit Sep 10, 2024 pm 05:27 PM

Um in cakephp4 mit Datum und Uhrzeit zu arbeiten, verwenden wir die verfügbare FrozenTime-Klasse.

Besprechen Sie CakePHP Besprechen Sie CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP ist ein Open-Source-Framework für PHP. Es soll die Entwicklung, Bereitstellung und Wartung von Anwendungen erheblich vereinfachen. CakePHP basiert auf einer MVC-ähnlichen Architektur, die sowohl leistungsstark als auch leicht zu verstehen ist. Modelle, Ansichten und Controller gu

CakePHP-Datei hochladen CakePHP-Datei hochladen Sep 10, 2024 pm 05:27 PM

Um am Datei-Upload zu arbeiten, verwenden wir den Formular-Helfer. Hier ist ein Beispiel für den Datei-Upload.

CakePHP erstellt Validatoren CakePHP erstellt Validatoren Sep 10, 2024 pm 05:26 PM

Der Validator kann durch Hinzufügen der folgenden zwei Zeilen im Controller erstellt werden.

So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein Dec 20, 2024 am 11:31 AM

Visual Studio Code, auch bekannt als VS Code, ist ein kostenloser Quellcode-Editor – oder eine integrierte Entwicklungsumgebung (IDE) –, die für alle gängigen Betriebssysteme verfügbar ist. Mit einer großen Sammlung von Erweiterungen für viele Programmiersprachen kann VS Code c

CakePHP-Kurzanleitung CakePHP-Kurzanleitung Sep 10, 2024 pm 05:27 PM

CakePHP ist ein Open-Source-MVC-Framework. Es erleichtert die Entwicklung, Bereitstellung und Wartung von Anwendungen erheblich. CakePHP verfügt über eine Reihe von Bibliotheken, um die Überlastung der häufigsten Aufgaben zu reduzieren.

Wie analysiert und verarbeitet man HTML/XML in PHP? Wie analysiert und verarbeitet man HTML/XML in PHP? Feb 07, 2025 am 11:57 AM

Dieses Tutorial zeigt, wie XML -Dokumente mit PHP effizient verarbeitet werden. XML (Extensible Markup-Sprache) ist eine vielseitige textbasierte Markup-Sprache, die sowohl für die Lesbarkeit des Menschen als auch für die Analyse von Maschinen entwickelt wurde. Es wird üblicherweise für die Datenspeicherung ein verwendet und wird häufig verwendet

See all articles