PHP RFC:初始化程序中的新功能
日期:2021-03-02 作者:尼基塔·波波夫 nikic@php.net 状态:已实施 建议版本:PHP 8.1
介绍
班 测试 { 公众的 功能 __构造 ( 私有的 记录器 $logger($记录器) = 新的 NullLogger(空记录器) , ) { } }
班 测试 { 私有的 记录器 $logger($记录器) ; 公众的 功能 __构造 ( ? 记录器 $logger($记录器) = 无效 , ) { $这个 -> 记录器 = $logger($记录器) ?? 新的 NullLogger(空记录器) ; } }
建议书
//全部允许: 功能 测试 ( $foo美元 = 新的 A类 , $巴 = 新的 B类 ( 1 ) , 美元baz = 新的 C类 ( x : 2 ) , ) { }
//全部不允许(编译时错误): 功能 测试 ( 美元 = 新的 ( 类名称CONSTANT ) ( ) , //动态类名 十亿美元 = 新的 班 { } , //匿名类 加元 = 新的 A类 ( ... [ ] ) , //参数解包 d美元 = 新的 B类 ( abc美元 ) , //不支持的常量表达式 ) { }
静止的 x美元 = 新的 富 ; 常数 C类 = 新的 富 ; 功能 测试 ( $参数 = 新的 富 ) { } #[AnAttribute(新Foo)] 班 测试 { 公众的 功能 __构造 ( 公众的 $道具 = 新的 富 , ) { } }
不支持的位置
评估顺序
当控制流到达静态变量声明时,将计算静态变量初始值设定项。 当控制流到达常量声明时,将计算全局常量初始值设定项。 属性参数在每次调用时从左到右求值 反射属性::getArguments() 或 反射属性::newInstance() . 每次调用未显式传递参数的函数时,都会从左到右计算参数默认值。
反射函数摘要::getStaticVariables() :返回静态变量的当前值,并强制计算尚未达到的任何初始值设定项。 反射参数::getDefaultValue() :计算默认值(每次调用时)。 反射参数::isDefaultValueConstant() 和 反射参数::getDefaultValueConstantName() :不计算默认值。 反射属性::getArguments() 和 反射属性::newInstance() :评估每次调用的属性参数。
嵌套属性
#[Assert\All(new Assert\NotNull,new Assert \Length(最大值:6))]