php最新稳定版本 php最新版本最多少( 三 )


注解允许你添加元数据到 PHP 函数、参数、类等 , 这些元数据随后就可以通过可编程方式获取到 , 在 PHP 7 或者更低版本中实现这样的功能需要解析代码注释块 , 而通过注解可以直接访问深度集成到 PHP 自身 。
编写一段示例代码方便你理解 , 假设你想要允许开发者添加中间件到控制器类/方法 , 使用注解 , 你可以这么做 , 示例代码:
<?phpdeclare(strict_types=1);// 首先 , 我们需要定义注解 , 注解本身只是一个原生的 PHP 类 , 并且自身被打上了注解的注释#[Attribute]class ApplyMiddleware{public array $middlware = [];public function __construct(...$middleware){$this->middleware = $middleware;}}// 下面的语法会添加上述注解到 MyController 类 , 并且传入 auth 作为参数#[ApplyMiddleware('auth')]class MyController{public function index(){}}// 然后我们就可以在类中使用反射获取所有的 ApplyMiddleware 注解并读取给定的中间件参数$reflectionClass = new ReflectionClass(MyController::class);$attributes = $reflectionClass->getAttributes(ApplyMiddleware::class);foreach ($attributes as $attribute) {$middlewareAttribute = $attribute->newInstance();var_dump($middlewareAttribute->middleware);}exit;运行上述代码 , 打印结果:
8新增构造函数属性提示支持
这个新特性是一个语法简写 , 支持将属性声明和构造函数属性初始化合并在一起 , 示例代码如下:
<?phpdeclare(strict_types=1);class User {public function __construct(public int $id,public string $name,) {}}$user = new User(1, 'Marcel');var_dump($user->id);var_dump($user->name);exit;上述代码运行结果:
php8的Trait 支持定义抽象私有方法 , 示例代码如下:
<?phpdeclare(strict_types=1);trait MyTrait {abstract private function neededByTheTrait(): string;public function doSomething() {return strlen($this->neededByTheTrait());}}class TraitUser {use MyTrait;// 支持该语法private function neededByTheTrait(): string { }// 不支持该语法 (错误的返回类型)// private function neededByTheTrait(): stdClass { }// 支持该语法 (非静态方法变成了静态方法)// private static function neededByTheTrait(): string { }}exit;php8新增对 match 表达式支持
match 表达式和 switch 分支语句类似 , 不过在语义上match表达式会更加安全并且可以直接返回值:示例代码如下
<?phpdeclare(strict_types=1);echo match (1) {0 => 'Foo',1 => 'Bar',2 => 'Baz',};exit;上述代码运行结果:
PHP 8 引入了新的名为 mixed 的类型
该类型等价于 array| bool| callable |int |float |null |object |resource |string , 示例代码如下:
<?phpdeclare(strict_types=1);function debug_function(mixed ...$data){var_dump($data);}debug_function(1, 'string', []);exit;上述代码运行结果:
8新增对 命名参数 的支持
命名参数允许基于参数名称传递参数到函数 , 而不是参数所在的位置 。那么这样一来 , 函数参数就可以自解释了且与顺序无关 , 并且允许跳过默认值 , 示例代码如下:
<?phpdeclare(strict_types=1);array_fill(start_index: 0, num: 100, value: 50);exit;新增对空安全运算符 ?-> 的支持
该运算符的左侧评估为 null 时 , 整个代码链路的执行就会被终止并且整体评估为 null 。但是如果要不为 null  , 那就要和普通的 -> 运算符功能一样:
<?phpdeclare(strict_types=1);class User {public function getAddress() {}}$user = new User();$country = $user?->getAddress()?->country?->iso_code;var_dump($country);exit;


以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!

「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助: