我们可以声明和初始化一个成员变量在同一类
问题描述:
我不太了解class
和他们的member variables
。 我的疑问是,我们可以在同一个类中声明并初始化另一个成员变量的成员变量吗?我们可以声明和初始化一个成员变量在同一类
这样
class newClass {
private $variable1 = 'new1';
private $variable2 = $variable1.'new2';
}
如果不能,请帮我找到这个解决方案的。 如果这是一个错误的问题,请原谅我。
答
始终在构造函数中初始化成员变量。您可以在构造函数中分配动态值。 试试这个代码:
<?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();
答
不,你不能这样做。
你可以做的反而是做初始化在构造函数中:
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';
这应该是公认的答案 – Akintunde007