0

有什么可以阻止我在__construct()括号内进行这样的类型提示吗?

<?php

    class SomeClass extends BaseClass {

        public function __construct(array $someArray) {

            parent::__construct($someArray);
        }

还是我只能这样做?

<?php

    class SomeClass extends BaseClass {

        public function __construct($someArray = array()) {

            parent::__construct($someArray);
        }

编辑:

这是有效的:(感谢@hakra 和@Leigh)

<?php

    class SomeClass extends BaseClass {

        public function __construct( array $someArray = NULL ) {

            parent::__construct( (array) $someArray);
        }

对我来说,它看起来又好又干净,我确切地知道它应该意味着什么。

4

2 回答 2

7

这是没有默认值的类型提示,说明必须给出一个参数,并且它的类型必须是一个数组

public function __construct(array $someArray) {


如果没有传递参数,这将提供参数的默认值,没有类型提示。

public function __construct($someArray = array()) {


他们是两个不同的东西。

在第二个实例中,您可以调用不带参数的函数,它会工作,但第一个不会。

如果需要,可以将两者结合起来,以指定默认值并指定所需的类型。

public function __construct(array $someArray = array()) {

或者正如@hakre 所说,你可以这样做:

public function __construct(array $someArray = NULL) {

于 2012-08-15T13:19:44.280 回答
3

你可以这样做:

public function __construct(array $someArray = NULL)
{
    $someArray = (array) $someArray;
    parent::__construct($someArray);
    ...

这里的情况是利用规则的= NULL例外。下一行:

    $someArray = (array) $someArray;

只是转换NULL为空数组的一些简写,否则将数组保持原样(所谓的cast Docs to array):

转换NULL为数组会产生一个空数组。

(来自:转换为数组文档

当然你可以写得更短:

public function __construct(array $someArray = NULL)
{
    parent::__construct((array) $someArray);
}

但它并没有很好地解释它。

于 2012-08-15T13:22:50.477 回答