我是面向对象PHP的新手,并且仍然围绕着类和子类。
在这个简单的例子中,$this->siteName
在实例化的类Two中是空的(从类One的方法“build”调用)。
第二类的实例有没有办法继承父级设置的属性值?
我知道我可以把第二类变成第一类的方法,但我喜欢有单独的组织文件。
有更好的方法吗?
文件一
class One {
protected $siteName;
function __construct() {
$this->siteName = 'Example';
}
public function build() {
$two = new Two();
return $two->build();
}
}
文件二
class Two extends One {
public function build() {
return "<h1>$this->siteName</h1>";
}
}
答案 0 :(得分:0)
听到它的声音,你试图解决错误的问题。
我对您的问题的理解是,出于组织原因,您基本上希望将public function build()
的代码放在另一个文件中。
以下是:
class One {
private $siteName;
public function __construct() {
$this->siteName = 'Example';
}
use One_build;
}
假设您有正确的自动加载设置,或者已正确包含文件,您可以拥有单独的文件:
trait One_build {
public function build() {
return "<h1>".$this->siteName."</h1>";
}
}
这允许源代码的水平传播。
答案 1 :(得分:0)
您的代码可以进行一些调整。你需要将你的字符串的h1标签与你的变量连接起来,引号不能围绕整个事物。
除此之外,只需创建一个类的实例并尝试它。
class One {
protected $siteName;
function __construct() {
$this->siteName = 'Example';
}
public function build() {
$two = new Two();
return $two->build();
}
}
class Two extends One {
public function build() {
return "<h1>".$this->siteName."</h1>";
}
}
$taco = new Two();
echo $taco->build();
这将返回<h1>Example</h1>