Rumah pembangunan bahagian belakang PHP7 一起看看 PHP 7.x 各个版本的新特性

一起看看 PHP 7.x 各个版本的新特性

Feb 01, 2021 am 09:42 AM

一起看看 PHP 7.x 各个版本的新特性

PHP 7.x 各个版本的新特性

前言

上个月同事看见我写

$a = $a ?? '';
Salin selepas log masuk

问我这个写法是什么,还有这样的写法?我说这是PHP7以上才有的写法,你不知道吗?他说不知道。

心里嘀咕了一下,打算开始写这篇博客。

PHP7 应该是除了基础之外,是一种现在的 PHP 。因为在PHP7 出现了,强类型定义,和一些语法上的写法,如 组合比较符, define() 可以定义数组等一些特性。下面开始正式介绍,从PHP7.0 开始介绍,以后出了新版本,也会在下面陆陆续续加上。
好了,我们开始

PHP 7.0

标量类型声明

什么是标量类型?

四种标量类型:
boolean (布尔型)
integer (整型)
float (浮点型, 也称作 double)
string (字符串)
两种复合类型:
array (数组)
object (对象)
资源是一种特殊变量,保存了到外部资源的一个引用。资源是通过专门的函数来建立和使用的。资源类型变量为打开文件、数据库连接、图形画布区域等的特殊句柄。
说的通俗一点,标量类型,就是定义变量的一个数据类型。

在php5中,有类名,接口,数组 和回调函数。在php中,增加了 符串(string), 整数 (int), 浮点数 (float), 以及布尔值 (bool)。下面我们来举例子,万事万物看例子

function typeInt(int $a){
    echo $a;}typeInt('sad');// 运行,他讲会报错 Fatal error: Uncaught TypeError: Argument 1 passed to type() must be of the type integer, string given
Salin selepas log masuk

在这里,我们定义了$a 必须为int类型,如果 type 函数里面传了string 所以报错。让我们修改上述的代码就没错了

function typeString(string $a){
    echo $a;}typeString('sad'); //sad
Salin selepas log masuk

返回值类型声明

关于函数的方法返回值可以定义,比如我某个函数必须要返回 int 类型,他就定死来返回 int ,如果你返回 string 则报错。如下

<?phpfunction returnArray(): array{

    return [1, 2, 3, 4];}print_r(returnArray());/*Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
)
*/
Salin selepas log masuk

那当我们的定义了数组,返回了string或者其他类型呢?

那么他将会报错 比如

function returnErrorArray(): array
{

    return '1456546';
}

print_r(returnErrorArray());
/*
Array
Fatal error: Uncaught TypeError: Return value of returnArray() must be of the type array, string returned in 
*/
Salin selepas log masuk

null 合并运算符

由于日常使用中存在大量同时使用三元表达式和 isset()的情况, 我们添加了null合并运算符 (??) 这个语法糖。如果变量存在且值不为NULL, 它就会返回自身的值,否则返回它的第二个操作数。

<?php

$username = $_GET[&#39;user&#39;] ?? &#39;nobody&#39;;
//这两个是等效的  当不存在user 则返回?? 后面的参数

$username = isset($_GET[&#39;user&#39;]) ? $_GET[&#39;user&#39;] : &#39;nobody&#39;;

?>
Salin selepas log masuk

太空船操作符

// 整数echo 1 <=> 1; // 0 当左边等于右边的时候,返回0echo 1 <=> 2; // -1  当左边小于右边,返回-1echo 2 <=> 1; // 1  当左边大于右边,返回1// 浮点数echo 1.5 <=> 1.5; // 0echo 1.5 <=> 2.5; // -1echo 2.5 <=> 1.5; // 1
 // 字符串echo "a" <=> "a"; // 0echo "a" <=> "b"; // -1echo "b" <=> "a"; // 1
Salin selepas log masuk

define 定义数组

在PHP7 以前的版本 define 是不能够定义数组的 现在是可以的 比如

define('ANIMALS', [
    'dog',
    'cat',
    'bird'
]);

echo ANIMALS[1]; // 输出 "cat"
Salin selepas log masuk

use 方法批量导入

// PHP 7 之前的代码use some\namespace\ClassA;use some\namespace\ClassB;use some\namespace\ClassC as C;use function some\namespace\fn_a;use function some\namespace\fn_b;use function some\namespace\fn_c;use const some\namespace\ConstA;use const some\namespace\ConstB;use const some\namespace\ConstC;// PHP 7+ 及更高版本的代码use some\namespace\{ClassA, ClassB, ClassC as C};use function some\namespace\{fn_a, fn_b, fn_c};use const some\namespace\{ConstA, ConstB, ConstC};
Salin selepas log masuk

###Unicode codepoint 转译语法

echo "\u{aa}"; //ªecho "\u{0000aa}";  //ª  echo "\u{9999}"; //香
Salin selepas log masuk

匿名类

<?phpinterface Logger {
    public function log(string $msg);}class Application {
    private $logger;

    public function getLogger(): Logger {
         return $this->logger;
    }

    public function setLogger(Logger $logger) {
         $this->logger = $logger;
    }}$app = new Application;$app->setLogger(new class implements Logger {  //这里就是匿名类
    public function log(string $msg) {
        echo $msg;
    }});
Salin selepas log masuk

PHP 7.1

可为空类型

参数以及返回值的类型现在可以通过在类型前加上一个问号使之允许为空。 当启用这个特性时,传入的参数或者函数返回的结果要么是给定的类型,要么是 null 。

<?phpfunction testReturn(): ?string{
    return &#39;elePHPant&#39;;}var_dump(testReturn()); //string(10) "elePHPant"function testReturn(): ?string{
    return null;}var_dump(testReturn()); //NULLfunction test(?string $name){
    var_dump($name);}test(&#39;elePHPant&#39;); //string(10) "elePHPant"test(null); //NULLtest(); //Uncaught Error: Too few arguments to function test(), 0 passed in...
Salin selepas log masuk

void

增加了一个返回void的类型,比如

<?phpfunction swap(&$left, &$right) : void{
    if ($left === $right) {
        return;
    }

    $tmp = $left;
    $left = $right;
    $right = $tmp;}$a = 1;$b = 2;var_dump(swap($a, $b), $a, $b);
Salin selepas log masuk

多异常捕获处理

这个功能还是比较常用的,在日常开发之中

<?php
try {
    // some code
} catch (FirstException | SecondException $e) {  //用 | 来捕获FirstException异常,或者SecondException 异常
  
}
Salin selepas log masuk

PHP 7.2

PHP7.2是PHP7系列 最少的新特性了

###允许分组命名空间的尾部逗号
比如

<?phpuse Foo\Bar\{
    Foo,
    Bar,
    Baz,};
Salin selepas log masuk

允许重写抽象方法

<?phpabstract class A{
    abstract function test(string $s);}abstract class B extends A{
    // overridden - still maintaining contravariance for parameters and covariance for return
    abstract function test($s) : int;}
Salin selepas log masuk

新的对象类型

<?phpfunction test(object $obj) : object  //这里 可以输入对象{
    return new SplQueue();}test(new StdClass());
Salin selepas log masuk

PHP 7.3

PHP7.3 在语法层面没有什么很大的改变。

PHP 7.4

类属性支持类型声明

恭喜 PHP 往强类型又迈了一步

<?phpclass User {
    public int $id;
    public string $name;}?>
Salin selepas log masuk

箭头函数

箭头函数提供了用于使用隐式按值作用域绑定定义函数的简写语法。与 JS 的箭头函数差不多,不过要带个 fn。吐槽一波

<?php$factor = 10;$nums = array_map(fn($n) => $n * $factor, [1, 2, 3, 4]);// $nums = array(10, 20, 30, 40);?>
Salin selepas log masuk

Null 合并运算符支持方法

<?php$array[&#39;key&#39;] ??= computeDefault();// 类似与这个if (!isset($array[&#39;key&#39;])) {
    $array[&#39;key&#39;] = computeDefault();}?>
Salin selepas log masuk

我是农场主,一个平时写代码复制粘贴的码农。

推荐(免费):PHP7

Atas ialah kandungan terperinci 一起看看 PHP 7.x 各个版本的新特性. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana cara menggunakan sesi dengan berkesan dalam Php 7? Bagaimana cara menggunakan sesi dengan berkesan dalam Php 7? Mar 10, 2025 pm 06:20 PM

Butiran artikel ini berkesan PHP 7 Pengurusan Sesi, meliputi fungsi teras seperti session_start (), $ _Session, session_destroy (), dan pengendalian kuki selamat. Ia menekankan amalan terbaik keselamatan termasuk HTTPS, Penjanaan ID Sesi, s

Bagaimana untuk memantau prestasi Php 7 dengan alat seperti New Relic? Bagaimana untuk memantau prestasi Php 7 dengan alat seperti New Relic? Mar 10, 2025 pm 06:28 PM

Artikel ini menerangkan cara memantau prestasi aplikasi Php 7 menggunakan relik baru. Ia memperincikan persediaan New Relic, Petunjuk Prestasi Utama (KPI) seperti skor APDEX dan masa tindak balas, pengenalan kesesakan melalui jejak transaksi dan trek ralat

Bagaimana untuk menaik taraf dari Php 5.6 hingga Php 7? Bagaimana untuk menaik taraf dari Php 5.6 hingga Php 7? Mar 10, 2025 pm 06:29 PM

Butiran artikel ini menaik taraf PHP 5.6 hingga Php 7, menekankan langkah -langkah penting seperti membuat sandaran, memeriksa keserasian pelayan, dan memilih kaedah peningkatan (Pengurus Pakej, Penyusun, Panel Kawalan, atau Konfigurasi Pelayan Web). Ia menangani potentia

Bagaimana cara autoload dalam Php 7? Bagaimana cara autoload dalam Php 7? Mar 10, 2025 pm 06:20 PM

Artikel ini menerangkan autoloading Php 7, menggunakan SPL_AUTOLOAD_REGISTER () untuk memuat kelas atas permintaan. Ia memperincikan amalan terbaik seperti autoloading dan caching berasaskan ruang nama untuk pengoptimuman prestasi, menangani isu-isu biasa (mis., Kelas tidak dijumpai

Bagaimana untuk menggunakan Git untuk Kawalan Versi dalam Projek PHP 7? Bagaimana untuk menggunakan Git untuk Kawalan Versi dalam Projek PHP 7? Mar 10, 2025 pm 06:27 PM

Artikel ini membimbing pemaju PHP 7 menggunakan Git untuk Kawalan Versi. Ia meliputi permulaan, pementasan, melakukan, mengabaikan fail, repositori jauh, cawangan, penggabungan, resolusi konflik, dan perintah git penting. Amalan terbaik untuk berkhasiat

Bagaimana cara menggunakan aplikasi PHP 7 ke pelayan web? Bagaimana cara menggunakan aplikasi PHP 7 ke pelayan web? Mar 10, 2025 pm 06:28 PM

Butiran artikel ini menggunakan aplikasi PHP 7, kaedah yang meliputi (FTP, SSH, alat penempatan), konfigurasi pelayan (Apache/nginx, PHP-FPM), persediaan pangkalan data, dan pertimbangan keselamatan penting. Ia menyoroti cabaran biasa seperti Compatib Server

Bagaimana cara menggunakan Xdebug untuk menyahpepijat kod PHP 7? Bagaimana cara menggunakan Xdebug untuk menyahpepijat kod PHP 7? Mar 10, 2025 pm 06:26 PM

Artikel ini menerangkan cara menggunakan XDEBUG untuk menyahpepijat kod PHP 7. Ia meliputi konfigurasi XDEBUG (pemasangan, tetapan php.ini, persediaan IDE), penggunaan breakpoint (bersyarat, fungsi, jauh), dan masalah sambungan masalah. Debuggi yang berkesan

Apakah pengaturcaraan berorientasikan objek (OOP) dalam Php 7? Apakah pengaturcaraan berorientasikan objek (OOP) dalam Php 7? Mar 10, 2025 pm 02:53 PM

Artikel ini menerangkan pengaturcaraan berorientasikan objek (OOP) dalam Php 7, menonjolkan manfaatnya: modularity, kebolehgunaan semula, kebolehkerjaan, dan organisasi kod yang lebih baik. Ia memperincikan kelas, objek, warisan, dan polimorfisme, menggambarkan penggunaannya

See all articles