我想做类似的事情:
class foo extends bar {
private $norf = '';
private $script;
public function __construct(){
$this->norf = 'blah blah';
}
public function qux(){
$this->script = new someOtherClass();
return $this->script->displayNorf();
}
}
class someOtherClass {
public function displayNorf(){
return $this->norf;
}
}
$test = new foo();
print($test->qux()); //blah blah
这个例子真的很愚蠢,但我正在寻找扩展类实例的方法。
答案 0 :(得分:1)
是的,您可以在班级中创建其他班级的实例。但是,您的代码示例仅仅因为类someOtherClass
不包含名为$norf
的属性而无法工作。
$this
指的是该类的当前实例,因此在someOtherClass->displayNorf()
中,由于该类不包含名为$norf
的属性,因此您将收到未定义的属性错误。
为了实现这一点,您需要将foo
类的属性$norf
从private
更改为protected
并延长foo
类通过someOtherClass
类进行如下操作:
class foo extends bar {
protected $norf = '';
private $script;
public function __construct(){
$this->norf = 'blah blah';
}
public function qux(){
$this->script = new someOtherClass();
return $this->script->displayNorf();
}
}
class someOtherClass extends foo {
public function displayNorf(){
return $this->norf;
}
}
$test = new foo();
print($test->qux()); //blah blah
答案 1 :(得分:1)
我认为答案是肯定的。如果您运行以下代码,则输出将为blah blah
。
<code>
<?php
class foo {
protected $norf = '';
private $script;
public function __construct(){
$this->norf = 'blah blah';
}
public function qux(){
$this->script = new someOtherClass();
return $this->script->displayNorf();
}
}
class someOtherClass extends foo {
public function displayNorf(){
return $this->norf;
}
}
$test = new foo();
print($test->qux()); //blah blah
?>
</code>