PHP预定义注解

2024-01-09 47

在PHP中,可以使用一些第三方库或框架来实现类似于预定义注解的功能。例如”AllowDynamicProperties”、”ReturnTypeWillChange”和”SensitiveParameter”类,本教程将详细介绍这三个类。

一、AllowDynamicProperties

用于标记 class,允许动态属性。动态属性是指在运行时可以动态添加和访问的属性,而不是在类定义时静态声明的属性。

final class AllowDynamicProperties {
/* 方法 */
public __construct()
}

示例:

从 PHP 8.2.0 起弃用动态属性,因此在不使用此注解标记类的情况下使用动态属性将发出弃用通知。

<?php
class DefaultBehaviour { }
#[\AllowDynamicProperties]
class ClassAllowsDynamicProperties { }
$o1 = new DefaultBehaviour();
$o2 = new ClassAllowsDynamicProperties();
$o1->nonExistingProp = true;
$o2->nonExistingProp = true;
?>

以上示例在 PHP 8.2 中的输出:

Deprecated: Creation of dynamic property DefaultBehaviour::$nonExistingProp is deprecated in file on line 10

二、ReturnTypeWillChange

大多数非 final 内部方法现在需要重写方法来声明兼容的返回类型,否则在继承验证期间会发出弃用通知。 如果由于 PHP 跨版本兼容性问题而无法为重写方法声明返回类型,可以添加 #[\ReturnTypeWillChange] 属性以消除弃用通知。

final class ReturnTypeWillChange {
/* 方法 */
public __construct()
}

三、SensitiveParameter

SensitiveParameter类用于标记敏感参数,如果出现在栈跟踪中,则应编辑其值。这种注解通常用于安全性相关的代码,比如处理用户输入、密码等敏感信息的函数或方法。

final class SensitiveParameter {
/* 方法 */
public __construct()
}

示例:

<?php
function defaultBehavior(
string $secret,
string $normal
) {
throw new Exception('Error!');
}
function sensitiveParametersWithAttribute(
#[\SensitiveParameter]
string $secret,
string $normal
) {
throw new Exception('Error!');
}
try {
defaultBehavior('password', 'normal');
} catch (Exception $e) {
echo $e, PHP_EOL, PHP_EOL;
}
try {
sensitiveParametersWithAttribute('password', 'normal');
} catch (Exception $e) {
echo $e, PHP_EOL, PHP_EOL;
}
?>

上述示例在 PHP 8.2 中的输出类似于:

Exception: Error! in example.php:7
Stack trace:
#0 example.php(19): defaultBehavior('password', 'normal')
#1 {main}
Exception: Error! in example.php:15
Stack trace:
#0 example.php(25): sensitiveParametersWithAttribute(Object(SensitiveParameterValue), 'normal')
#1 {main}
  • 广告合作

  • QQ群号:707632017

温馨提示:
1、本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。邮箱:2942802716#qq.com(#改为@)。 2、本站原创内容未经允许不得转裁,转载请注明出处“站长百科”和原文地址。
PHP预定义注解
上一篇: PHP WeakMap类