我们可以从同一个类中的另一个成员变量声明和初始化成员变量

时间:2017-09-23 09:02:15

标签: php class oop

我对class及其member variables了解不多。 我怀疑的是,我们可以从同一个类中的另一个成员变量声明和初始化成员变量吗?

像这样

class newClass {
    private $variable1 = 'new1';
    private $variable2 = $variable1.'new2';
}

如果不能,请帮我找到解决方法。 如果这是一个错误的问题,请原谅我。

2 个答案:

答案 0 :(得分:4)

没有。你不能这样做。

你可以做的是在构造函数中进行初始化:

class Foo 
{
    private $a = 'something';
    private $b;

    public function __construct() 
    {
        $this->b = $this->a . 'foobar';

    }
}

Buuuut,这实际上是一个有点可疑的做法,因为你应该尽量避免在构造函数中进行任何计算,因为你失去了实际测试逻辑部分的能力(因为构造函数总是被执行,你有无法比较之前和之后的状态)。

更好的方法是将此逻辑留在getter-methods中:

class Foo 
{
    const DEFAULT_VALUE = 'lorem ipsum';
    const DEFAULT_PREFIX = '_';

    private $bar;

    public function __construct(string $bar = self::DEFAULT_VALUE)  
    {
        $this->bar = $bar;
    }


    public function getPrefixedBar(string $prefix = self::DEFAULT_PREFIX)
    {
        return $prefix .  $this->bar;
    }
}

使用此代码,您将获得:

$a = new Foo;
echo $a->getPrefixedBar(); // shows: '_lorem ipsum';
echo $a->getPrefixedBar('test '); // shows: 'test lorem ipsum';

$b = new Foo('xx');
echo $b->getPrefixedBar(); // shows: '_xx';

答案 1 :(得分:2)

始终在构造函数中初始化成员变量。您可以在构造函数中指定动态值。 试试这段代码:

<?php
class newClass {
    private $variable1 ;
    private $variable2;
    function __construct()
    {
      $this->variable1 = 'new1';
      $this->variable2 = $this->variable1.'new2';
    }
    function get_data()
    {
      echo "var1= ".$this->variable1;
      echo "<br>";
      echo "var2= ".$this->variable2;
    }
}
$obj = new newClass();
$obj->get_data();