あなたは今のPHPを本当に理解していますか?
少し前に、会社のプロジェクトが PHP5.3 から PHP7 にアップグレードされました。現在、プロジェクトは PHP7 のいくつかの新しい構文と機能を使用し始めています。 . PHP バージョン 5.4、5.5、5.6 を振り返ると少し知識が不足しているように感じられるため、その概念を補うために『モダン PHP』を読むことにしました
名前空間
名前空間はよく使われるので、いくつかの注目すべき実践と詳細を記録しますこれは行わないでください。人々を混乱させるのは簡単です。
<?php use Symfony\Component\HttpFoundation\Request, Symfony\Component\HttpFoundation\Response, Symfony\Component\HttpFoundation\Cookie;
use ステートメントを 1 行記述することを提案します。
<?php use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Cookie;
<?php namespace Foo { //code } namespace Bar { //code }
グローバル名前空間
。PHPのネイティブExceptionクラスを使用したい場合は、クラス名の前にシンボルを追加する必要があります
<?php namespace My\App; class Foo { public function doSomething() { $exception = new \Exception(); } }
3 . TraitsLaravel
フレームワークを学ぶ前は、これはクラスのような新しい概念です。部分的な実装は、Ruby の結合モジュールまたはミックスインと同様に、1 つまたは複数の既存の PHP クラスに混合できます。
特性を使用する理由
たとえば、Car とPhone: これらはすべて GPS 機能を必要とします。この問題を解決するには、最初に親クラスを作成し、それから Car と Phone を継承させます。ただし、この祖先がそれぞれの継承階層に属していないことは明らかです。 を作成し、GPS の機能インターフェイスを定義し、Car クラスと Phone クラスの両方にこのインターフェイスを実装させることができますが、これにより両方のクラスでその機能を実現することができなくなります。繰り返しの GPS 機能を実装する場合、これは DRY (繰り返しを行わない) 原則に準拠しません。
3 番目の反応は、GPS 機能を実装するトレイトを作成し、このトレイトを Car とミックスすることです。機能に影響を与えずに機能を実現するための電話クラス。
特性を作成して使用する<?php trait MyTrait{ //实现 }
Iterator インターフェース
を実装する必要はありません。ジェネレーターは、必要に応じて反復される値を計算して生成します。query がないと、ジェネレーターは次に反復する値が何であるかを知ることができず、ジェネレーター内で戻ったり早送りしたりする方法はありません。具体的には、次の 2 つの例を見てください:
単純なジェネレーター
<?php class MyClass { use MyTrait; // 类的实现 }
<?php function makeRange($length) { for ($i = 0; $i < $length; $i++) { yield $i; } } foreach (makeRange(1000000) as $i) { echo $i, PHP_EOL; }
このシナリオを処理するには、通常の方法では、まず ファイルをすべて読み取ります。 コンテンツは
array
ファイルが非常に大きい場合、一度に読み取るのに多くのメモリ リソースが必要になります。ジェネレーターはシステム メモリをほとんど消費しないため、このシナリオに最適です
。5. クロージャ
理論的には、クロージャと匿名関数は異なる概念です。ただし、PHP ではこれを同じ概念として扱います。 単純なクロージャ
<?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); }
注: $closurevariableを呼び出すことができる理由は、この変数の値がクロージャであり、closure
オブジェクトがinvoke()マジックメソッドを実装しているためです。
変数名の後に () がある限り、PHP は invoke() メソッドを見つけて呼び出します。 附加状态 使用bindTo()方法附加闭包的状态 第11行是重点所在,把路由回调绑定到了当前的App实例上。这么做能在回调函数中处理App实例的状态: 字节码缓存不是PHP的新特性,很多独立的扩展可以实现缓存。从PHP5.5.0开始,PHP内置了字节码缓存功能,名为Zend OPcache。 字节码缓存是什么 从PHP5.4.0起,PHP内置了Web服务器,这对众多使用Apache或nginx的php开发者来说,可能是个隐藏功能。不过,这个内置的服务器功能并不完善,不应该在生产环境中使用,但对本地开发来说是个便利的工具,可以用于快速预览一些框架和应用。 启动服务器 路由器脚本 是否为内置的服务器 以上があなたは今のPHPを本当に理解していますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。
使用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!"
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;
}
}
<?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是解释性语言,PHP解释器执行PHP脚本时会解析PHP脚本代码,把PHP代码编译成一系列Zend操作码,然后执行字节码。每次请求PHP文件都是这样,会消耗很多资源。字节码缓存能存储预先编译好的PHP字节码。这意味着,请求PHP脚本时,PHP解释器不用每次都读取、解析和编译PHP代码。这样能极大地提升应用的性能。7. 内置的HTTP服务器
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服务器
}

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

CakePHP はオープンソースの MVC フレームワークです。これにより、アプリケーションの開発、展開、保守がはるかに簡単になります。 CakePHP には、最も一般的なタスクの過負荷を軽減するためのライブラリが多数あります。

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります
