我对class
及其member variables
了解不多。
我怀疑的是,我们可以从同一个类中的另一个成员变量声明和初始化成员变量吗?
class newClass {
private $variable1 = 'new1';
private $variable2 = $variable1.'new2';
}
如果不能,请帮我找到解决方法。 如果这是一个错误的问题,请原谅我。
答案 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();