PHP构造函数中的类型暗示?
在PHP构造函数中的类型暗示?,php,class,oop,constructor,Php,Class,Oop,Constructor,在\uu construct()括号中是否有任何东西可以阻止我这样进行类型暗示 <?php class SomeClass extends BaseClass { public function __construct(array $someArray) { parent::__construct($someArray); } 这是没有默认值的类型暗示,说明必须给出参数,并且它的类型必须是数组 public funct
\uu construct()
括号中是否有任何东西可以阻止我这样进行类型暗示
<?php
class SomeClass extends BaseClass {
public function __construct(array $someArray) {
parent::__construct($someArray);
}
这是没有默认值的类型暗示,说明必须给出参数,并且它的类型必须是数组
public function\u构造(数组$someArray){
如果没有传递参数,并且没有类型提示,那么这将为参数提供默认值
public function\uuu构造($someArray=array()){
它们是两种不同的东西
在第二种情况下,您可以不带参数地调用函数,它将工作,但第一种情况不会
如果需要,可以将两者结合起来,以指定默认值并指定所需类型
public function\uuu构造(数组$someArray=array()){
或者如@hakre所述,您可以:
公共函数uu构造(数组$someArray=NULL){
您可以这样做:
public function __construct(array $someArray = NULL)
{
$someArray = (array) $someArray;
parent::__construct($someArray);
...
这里的情况是使用规则的=NULL
异常。下一行:
$someArray = (array) $someArray;
这只是将NULL
转换为空数组的一种简写方式,否则数组将保持原样(即所谓的to数组):
将NULL
转换为数组将导致空数组
(发件人:)
当然你可以写得更短:
public function __construct(array $someArray = NULL)
{
parent::__construct((array) $someArray);
}
但这并不能很好地解释它。看起来很合法-为什么不试试呢?你可以两个都做:_构造(array$arr=array())你已经键入了代码,为什么不试着运行它?@Pekka,是的,我想我只需要测试一下:)我需要能够让数组可选。F.ex.u构造(array$someArr=false)。您认为它有效吗?不必。如果将其设置为可选的(array$someArray=NULL)
,请检查NULL,将其设置为可选。\u构造(array$someArray)
将不接受NULL
作为其参数。array$someArray=array()
可以,使用null
在我看来只是误导。@Jack你是对的,它只能提供null作为默认值。谢谢,我没有意识到这条规则有null
例外。谢谢你们的解释。我试着投票给你们,但我只是收到一些无聊的消息。好的,我我尝试了这个方法,效果非常好。对我来说,像这篇文章中描述的@hakra一样做这个方法看起来很棒。谢谢。
$someArray = (array) $someArray;
public function __construct(array $someArray = NULL)
{
parent::__construct((array) $someArray);
}