目次
PHP7.3 の新機能
1. Null 許容型
http2 サーバー プッシュのサポートが CURL 拡張機能に追加されました
object
2018 年 12 月 6 日
公式 Web サイト PHP7.3 の新機能
$b を解析するとき、参照の受け渡しが使用されます。このとき、$b と $v[1] 要素は維持されます。参照関係。
5 instanceof 演算子はリテラル構文をサポートします。
6 呼び出し時のパラメーターの末尾のカンマのサポート
関数を呼び出す場合、2 番目 (最後の) パラメーターの後にカンマを追加できます。しかし、その定義は機能しません。
この関数は、現在の BC 関数で使用されるスケールの取得をサポートします。
9 マルチバイト文字列関数の更新
12 CompileError 例外により一部のコンパイル エラーが置き換えられます
13 パフォーマンスの向上
14 废弃大小写不敏感的常量
15 废弃在字符串中搜索非字符串内容
16 新常量
PHP7.4新特性
1、预加载
使用方法:
2、FFI
3、类属性的类型支持
4、NULL合并赋值运算符
5、弃用WDDX扩展
6、简化匿名函数
7、新增mb_str_split函数
8、始终可用的Hash扩展
ホームページ バックエンド開発 PHP7 php7 の全バージョンの新機能の概要 [推奨]

php7 の全バージョンの新機能の概要 [推奨]

Sep 20, 2021 pm 05:09 PM
php

PHP7.1 の新機能

1. Null 許容型

のタイプ型の前に疑問符を追加することで、パラメーターと戻り値を空にすることができるようになりました。この機能が有効な場合、渡されるパラメーターまたは関数によって返される結果は、指定された型または null

#php5
function($a = null){
  if($a===null) {
    return null;
  }
  return $a;
}

#php7+
function fun() :?string
{
  return null;
}

function fun1(?$a)
{
  var_dump($a);
}
fun1(null);//null
fun1('1');//1
ログイン後にコピー

2 のいずれかになります。 void として宣言された場合は、return ステートメントを単純に省略できます。 void の場合、NULL

は正当な戻り値ではありません。

function fun() :void
{
  echo "hello world";
}
ログイン後にコピー
3. クラス定数の可視性

class Something
{
    const PUBLIC_CONST_A = 1;
    public const PUBLIC_CONST_B = 2;
    protected const PROTECTED_CONST = 3;
    private const PRIVATE_CONST = 4;
}
ログイン後にコピー
4. 反復可能な疑似クラス

これはパラメータまたは In で使用できます。戻り値の型は、配列を受け入れるか、Traversable

インターフェイスを実装するオブジェクトを表します。

function iterator(iterable $iter)
{
    foreach ($iter as $val) {
        //
    }
}
ログイン後にコピー
5. 複数の例外キャプチャ処理

1 つの catch Statement ブロックで、パイプ文字 (_|_) を介して複数の例外をキャプチャできるようになりました。これは、異なるクラスの異なる例外を同時に処理する必要がある場合に便利です
try {
    // some code
} catch (FirstException | SecondException $e) {
    // handle first and second exceptions
}
ログイン後にコピー

6。リストはキー名をサポートします

$data = [
    ["id" => 1, "name" => 'Tom'],
    ["id" => 2, "name" => 'Fred'],
];

// list() style
list("id" => $id1, "name" => $name1) = $data[0];
var_dump($id1);//1
ログイン後にコピー
7。文字列はサポートします負の方向

$a= "hello";
$a[-2];//l
ログイン後にコピー
8. コールバックをクロージャに変換

Closure には、呼び出し可能を Closure オブジェクトにすばやく変換するための新しい静的メソッドが追加されました。
<?php
class Test
{
    public function exposeFunction()
    {
        return Closure::fromCallable([$this, &#39;privateFunction&#39;]);
    }

    private function privateFunction($param)
    {
        var_dump($param);
    }
}

$privFunc = (new Test)->exposeFunction();
$privFunc('some value');
ログイン後にコピー

9. http2 サービス プッシュ

http2 サーバー プッシュのサポートが CURL 拡張機能に追加されました

元のリンク: https:// cloud.tencent.com/dev...

PHP7.2 の新機能

新しいオブジェクト タイプ

この新しいオブジェクト タイプ、

object

、反変パラメータ入力と共変戻り値に使用できるオブジェクト タイプを導入します。

<?php

function test(object $obj) : object
{
    return new SqlQueue();
}

test(new Stdclass());
ログイン後にコピー
抽象メソッドのオーバーライドを許可する

抽象クラスが別の抽象クラスから継承する場合、継承された抽象クラスは、継承された抽象クラスの抽象化をオーバーライドできます。

<?php

abstract class A
{
    abstract function test(string $s);
}

abstract class B extends A
{
    abstract function test($s) : int;
}
ログイン後にコピー

Argon2 アルゴリズムを使用してパスワード ハッシュを生成する

Argon2 がパスワード ハッシュ API (これらの関数はpassword_で始まる) に追加されました。公開される定数は次のとおりです:

PASSWORD_ARGON2I
  • PASSWORD_ARGON2_DEFAULT_MEMORY_COST
  • #PASSWORD_ARGON2_DEFAULT_TIME_COST
  • PASSWORD_ARGON2_DEFAULT_THERADS
  • グループ化された名前空間の末尾のカンマを許可する
  • PHP 7 では、グループ化に末尾のカンマを使用して名前空間を導入できます。
<?php

use Foo\Bar\{
    Foo,
    Bar,
    Baz,
};
ログイン後にコピー

PHP7.3 の新機能

1 リリース時期

2018 年 12 月 6 日

公式 Web サイト PHP7.3 の新機能

2柔軟な

Heredoc

および

Nowdoc

構文の更新 終了タグを単独の行に置いたり、セミコロンを続けたりする必要がなくなりました。同時に、終了タグでもインデントを使用できます。インデントを使用すると、ドキュメント コンテンツの各行で対応するインデントがスキップされます。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">$data = [&quot;元素&quot;, &lt;&lt;&lt;STR Doc Content The new line STR, 42,]; var_dump($data); array(3) { [0]=&gt;   string(6) &quot;元素&quot;   [1]=&gt;   string(25) &quot;Doc Content The new line&quot;   [2]=&gt;   int(42) }</pre><div class="contentsignin">ログイン後にコピー</div></div>上記の構文では、Heredoc は配列要素として表示され、終了タグは別の行になくインデントされています。定義された文字列の内容では、両方の行のインデントが削除されていることに注意してください。 <p>3 配列の破棄は参照割り当てをサポートします</p> <p>デモ: </p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">$v = [10, 20]; [$a, &amp;$b] = $v; $b += 10; var_dump($v, $a, $b); array(2) {   [0]=&gt;   int(10)   [1]=&gt;   &amp;int(30) } int(10) int(30)</pre><div class="contentsignin">ログイン後にコピー</div></div> <h2 id="b-を解析するとき-参照の受け渡しが使用されます-このとき-b-と-v-要素は維持されます-参照関係">$b を解析するとき、参照の受け渡しが使用されます。このとき、$b と $v[1] 要素は維持されます。参照関係。 </h2> <p>4 リスト構造は参照解決をサポートします。 </p> <p>デモ: </p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">$v = [10, 20]; list($c, &amp;$d) = $v; $d += 10; var_dump($v, $c, $d); array(2) {   [0]=&gt;   int(10)   [1]=&gt;   &amp;int(30) } int(10) int(30)</pre><div class="contentsignin">ログイン後にコピー</div></div> <h2 id="instanceof-演算子はリテラル構文をサポートします">5 instanceof 演算子はリテラル構文をサポートします。 </h2> <p>instanceof の最初のオペランドはリテラルをサポートし、非オブジェクト リテラル検出の結果は false です。 </p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">var_dump(&quot;literal&quot; instanceof stdClass); var_dump(42 instanceof stdClass); var_dump(new stdClass() instanceof stdClass); bool(false) bool(false) bool(true)</pre><div class="contentsignin">ログイン後にコピー</div></div> <h2 id="呼び出し時のパラメーターの末尾のカンマのサポート">6 呼び出し時のパラメーターの末尾のカンマのサポート </h2> <p>関数を呼び出すとき、パラメーター リストの後にカンマを使用できます。 </p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">function methodName($p1, $p2) {     // some statmenet     var_dump($p1, $p2); } methodName(10, 20, ); int(10) int(20)</pre><div class="contentsignin">ログイン後にコピー</div></div> <h2 id="関数を呼び出す場合-番目-最後の-パラメーターの後にカンマを追加できます-しかし-その定義は機能しません">関数を呼び出す場合、2 番目 (最後の) パラメーターの後にカンマを追加できます。しかし、その定義は機能しません。 </h2> <p>7 BC 数学関数</p> <p></p>bcscale()<h2 id="この関数は-現在の-BC-関数で使用されるスケールの取得をサポートします">この関数は、現在の BC 関数で使用されるスケールの取得をサポートします。 </h2> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">bcscale(3); var_dump(bcscale()); int(3)</pre><div class="contentsignin">ログイン後にコピー</div></div> <p>8 LDAP 完全サポート<code>LDAP: ライトウェイト ディレクトリ アクセス プロトコル、ライトウェイト ディレクトリ アクセス プロトコルは完全にサポートされています。

9 マルチバイト文字列関数の更新

フル機能の Case-Mapping および Case-Folding のサポート

大文字と小文字を区別しない文字列演算子は Case-Folding を使用します
  • Unicode 11 のサポート
  • 長い文字列のサポート
  • 名前付きキャプチャのサポート
  • 10 FastCGI プロセス管理
  • 追加次のオプションが使用されますFPM ログを設定するには: (未翻訳)

log_limit

log_buffering
  • decorate_workers_output
  • 11 Argon2id アルゴリズムのサポート
  • パラメータを設定した後、
  • --with-password-argon2[=dir]。 Password_*() 関数で Argon2i および Argon2id ハッシュのサポートが提供されました。 PASSWORD_ARGON2ID 定数を使用してアルゴリズムを指定します。 PHP では、libargon2 ライブラリのバージョンが 20161029 以降である (等しい) 必要があります。

12 CompileError 例外により一部のコンパイル エラーが置き換えられます

新しい CompileError 例外が追加され、ParseError はこの例外を継承します。現時点では、Token_parse モードの Token_GET_All() によって発生する可能性のあるコンパイル エラーのみに影響します。

13 パフォーマンスの向上

PHP7.3 は PHP 7.0 より 22% 高速であると言われています。まだテストされていないので、機会があればストレステストを行ってください。

14 废弃大小写不敏感的常量

大小写不敏感的常量声明现已被废弃。将 TRUE 作为第三个参数传递给 define() 会导致一个废弃警告。大小写不敏感的使用(在读取时使用一个与声明时不同的大小写方式)也已被废弃。

15 废弃在字符串中搜索非字符串内容

将一个非字符串内容传递给字符串搜索函数。 在将来所有待搜索的内容都将被视为字符串,而不是 ASCII 编码值。如果需要依赖这个特性,你应该 要么显示地进行类型转换(转为字符串),或者显示地调用 chr()。 以下是受到影响的方法:

16 新常量

新常量

原文链接:https://zhuanlan.zhihu.com/p/...

PHP7.4新特性

1、预加载

预加载功能是指在服务启动时,未运行任何应用程序代码之前,将一组PHP文件加载到内存中,甚至可以对框架进行预加载,以提高性能。如果对预加载代码进行修改,需要重启服务。

预加载相比opcache:opcache虽然解决了重复编译问题,但opcache本身也有开销。引用Dmitry Stogov大佬的话:

Not only. The idea is to completely eliminate compilation and opcache overhead (copying from SHM to process memory and insertions into function/class tables on each request). Using this technique, we might write standard functions and classes in PHP (similar to systemlib.php in HHVM).  
预加载是完全消除编译和opcache所带来的开销(从共享内存复制到进程内存,并在每个请求上插入到function/class表中),使用这种技术可以在PHP中编写标准函数和类(类似于HHVM中的systemlib.php)

想想看,其实预加载主要是提升像php-fpm这种架构形式的性能,并且会占用更多的内存资源。Benjamin Morel对预加载进行了测试。

https://github.com/composer/composer/issues/7777#issuecomment-440268416

使用方法:

通过修改php.ini中的opcache.preload来选择预加载程序。使用方法如下:

php.ini

[opcache]
zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=1
opcache.preload=preload.php
ログイン後にコピー

preload.php

<?php 

function preload()
{
    echo &#39;preload&#39;;
}

opcache_compile_file(&#39;hello.php&#39;);
ログイン後にコピー

hello.php

<?php 

function hello()
{
    echo &#39;hello&#39;;
}
ログイン後にコピー

test.php

<?php

hello();
echo &#39; &#39;;
preload();
echo PHP_EOL;
ログイン後にコピー

运行

~$ php test.php
hello preload
ログイン後にコピー

2、FFI

有时间我们再聊,先占上位置。

3、类属性的类型支持

php版本<7.4:

<?php

class User
{
    /** @var int $id */
    private $id;

    /** @var string $name */
    public $name;
}
ログイン後にコピー

php版本>=7.4:

<?php

class User
{
    private int $id;

    public string $name;
}
ログイン後にコピー

一个完整的示例:

<?php

class Example {
    // 支持除了“void”和“callable”之外的所有类型
    public int $scalarType;
    protected ClassName $classType;
    private ?ClassName $nullableClassType;
 
    // 在静态属性中也是合法的
    public static iterable $staticProp;
 
    // 也可以与“var”一起使用
    var bool $flag;
 
    // 也可以使用默认值
    public string $str = "foo";
    public ?string $nullableStr = null;
 
    // 在一次声明多个属性的情况下,类型会作用于各属性。
    public float $x, $y;
    // 相当于这样:
    public float $x;
    public float $y;
}
ログイン後にコピー

以下是支持的所有类型:

bool, int, float, string, array, object
iterable
self, parent
class interface // 任何 类名、接口名
?type // 其中“type”可以是以上任意一种类型
ログイン後にコピー

4、NULL合并赋值运算符

写法:$a ??= 1 。其实就是 $a = $a ?? 1 的语法糖。

例子:

<?php

$arr[&#39;a&#39;] ??= &#39;a&#39;;
/*等同于*/ $arr[&#39;a&#39;] = $arr[&#39;a&#39;] ?? &#39;a&#39;; 

$b ??= &#39;b&#39;; 
/*等同于*/ $b = $b ?? &#39;b&#39;;
ログイン後にコピー

5、弃用WDDX扩展

我相信大多数人和我一样并不了解wddx,wddx是一个很“古老”的数据格式,基于xml(emmm,可能我理解的不是很对,大概其就是这个意思吧)。现在都在用json,所以弃用了也罢。有兴趣的童鞋可以看一下这篇文章。

https://blog.csdn.net/guoguo1980/article/details/2436342

6、简化匿名函数

此特性就是一个语法糖,相信你在别的语言中也见到过,下面是一些例子:

<?php

$adder = fn($x, $y) => $x + $y;

// 等同于

$adder = function ($x, $y) {
    return $x + $y;
};

/*******************************/

$y = 1;
$fn1 = function ($x) use ($y) {
    return $x + $y;
}; 

// 等同于

$fn2 = fn($x) => $x + $y;

// 新的写法省去了 use, 变得更加简洁
ログイン後にコピー

更多用法:

<?php

fn(array $x) => $x;          // 参数类型声明
fn(): int => $x;             // 返回类型声明
fn($x = 42) => $x;           // 参数默认值
fn(&$x) => $x;               // 引用传递
fn&($x) => $x;               // 引用返回
fn($x, ...$rest) => $rest;   // 变长参数
ログイン後にコピー

其实我个人不是很赞同php引入那么多语法糖,这使得php的语法变得越来越复杂,关于此rfc的投票,鸟哥选择了反对,包括韩天峰大佬也对此特别反对,php应该回归初心——简单高效。

7、新增mb_str_split函数

mb_str_split是mbstring扩展中新增的一个函数,通过函数名就可以猜到,它是str_split函数的“增强版(多字节处理)”,它的作用和str_split一样,都是将字符串拆分成数组,只是增加了第三个参数,用于设置字符编码。

说明:

mb_str_split ( string $string [, int $split_length = 1, string $encoding = mb_internal_encoding() ] ) : array
ログイン後にコピー

例子:

<?php
print_r(mb_str_split("PHP是世界上最好的语言", 3));

// Array
// (
//     [0] => PHP
//     [1] => 是世界
//     [2] => 上最好
//     [3] => 的语言
// )

// 也可以指定编码
print_r(mb_str_split("PHP是世界上最好的语言", 3, "GB2312"));
ログイン後にコピー

8、始终可用的Hash扩展

从PHP7.4开始,Hash扩展是PHP核心扩展,无法通过--disable-hash禁用,因此它始终可用。

原文链接:https://zhuanlan.zhihu.com/p/60544350

以上がphp7 の全バージョンの新機能の概要 [推奨]の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

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

今まで知らなかったことを後悔している 7 つの PHP 関数 今まで知らなかったことを後悔している 7 つの PHP 関数 Nov 13, 2024 am 09:42 AM

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

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

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

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

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

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

母音を文字列にカウントするPHPプログラム 母音を文字列にカウントするPHPプログラム Feb 07, 2025 pm 12:12 PM

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

PHPでの後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? Apr 03, 2025 am 12:03 AM

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。

See all articles