Verstehst du wirklich aktuelles 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. Merkmale
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;
<?php use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Cookie;
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 }
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 >
<?php namespace My\App; class Foo { public function doSomething() { $exception = new \Exception(); } }
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 verwenden4. 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
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{ //实现 }
<?php class MyClass { use MyTrait; // 类的实现 }
Um mit diesem Szenario umzugehen, besteht die übliche Methode darin, zunächst den gesamten Inhalt der Datei zu lesen und ihn in das
Arrayeinzufü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; }
Hinweis: Der Grund, warum wir $closure
<?php function getRows($file) { $handle = fopen($file, 'rb'); if ($handle === false) { throw new Exception(); } while (feof($handle) === false) { yield fgetcsv($handle); } } foreach (getRows('data.csv') as $row) { print_r($row); }
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('%s, %s', $name, $doCommand); }; } // 把字符串“Clay”封装在闭包中 $clay = enclosePerson('Clay'); // 传入参数,调用闭包 echo $clay('get me sweet tea!'); // 输出 --> "Clay, get me sweet tea!"
使用bindTo()方法附加闭包的状态
PHP框架经常使用bindTo()方法把路由URL映射到匿名回调函数上,框架会把匿名函数绑定到应用对象上,这么做可以在这个匿名函数中使用$this关键字引用重要的应用对象。例子如下:
<?php class App { protected $routes = array(); protected $responseStatus = '200 OK'; protected $responseContentType = 'text/html'; protected $responseBody = 'Hello world'; 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; } }
第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');
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
php -S localhost:8000 -c app/config/php.ini
路由器脚本
与Apache和nginx不同,它不支持.htaccess文件。因此,这个服务器很难使用多数流行的PHP框架中常见的前端控制器。PHP内置的服务器使用路由器脚本弥补了这个遗漏的功能。处理每个HTTP请求前,会先经过这个路由器脚本,如果结果为false,返回当前HTTP请求中引用的静态资源URI。
php -S localhost:8000 route.php
是否为内置的服务器
<?php if (php_sapi_name() === 'cli-server') { // php 内置的web服务器 }
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!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



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.

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

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

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

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

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 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.

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
