0

为什么我不能这样做?

class Foo {

    private $val = array(
        'fruit' => 'apple',
        'color' => 'red'
    );

    function __construct( $arg = $this->val['color'] ) {

        echo $arg

    }

}

$bar = Foo;

我也试过这个:

class Foo {

    private static $val = array(
        'fruit' => 'apple',
        'color' => 'red'
    );

    function __construct( $arg = self::val['color'] ) {

        echo $arg

    }

}

$bar = Foo;

我需要能够从类中已经定义的变量中为我的一些方法参数提供默认值。

4

2 回答 2

0

当创建该类的对象并且您尝试传入$this构造函数参数默认值时调用构造函数,因此 $this 对您的构造函数不可用。

$this仅在调用 Constructorget 后可用。

所以请试试这个

class Foo {

    private $val = array(
        'fruit' => 'apple',
        'color' => 'red'
    );

    function __construct( $arg = NULL ) {
        echo $arg===NULL?$this->val['color'] : $arg;

    }

}

$bar = Foo;
于 2013-11-14T10:59:23.233 回答
0

您可以像下面这样尝试;

class Foo {

private $val = array(
'fruit' => 'apple',
'color' => 'red'
);

function __construct($arg=null) {

echo ($arg==null) ? $this->val['color'] : $arg;

}

}

$bar = new Foo; // Output 'red'

这将在类中定义的 $val 数组中回显您的默认颜色,或者您可以传递初始 $arg 值,以便它将覆盖默认值;

$bar = new Foo('Yellow'); // Output 'Yellow'
于 2013-11-14T10:49:16.977 回答