2017-09-23 146 views
0

我不太了解class和他们的member variables。 我的疑问是,我们可以在同一个类中声明并初始化另一个成员变量的成员变量吗?我们可以声明和初始化一个成员变量在同一类

这样

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

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

回答

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(); 
4

不,你不能这样做。

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

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

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

    } 
} 

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

一个更好的办法是离开这个逻辑在吸气的方法:

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'; 
+2

这应该是公认的答案 – Akintunde007