让我从代码开始:
<?php
class Father{
function Father(){
echo 'A wild Father appears..';
}
function live(){
echo 'Some Father feels alive!';
}
}
class Child{
private $parent;
function Child($p){
echo 'A child is born :)';
}
function setParent($p){
$parent = $p;
}
function dance(){
echo 'The child is dancing, when ';
$parent -> live();
}
}
$p = new Father();
$p -> live();
$c = new Child($p);
$c -> dance();
?>
运行时我在第24行上遇到错误,说“PHP致命错误:在第24行的../test.php中的非对象上调用成员函数live()” 我已经在网上搜索了一段时间,无法找到解决方案。 有人能帮助我理解php5吗?
答案 0 :(得分:3)
您需要使用$this->parent->live()
来访问成员变量。此外,您必须将父对象分配给它。
class Child{
private $parent;
function __construct($p){
echo 'A child is born :)';
$this->parent = $p; // you could also call setParent() here
}
function setParent($p){
$this->parent = $p;
}
function dance(){
echo 'The child is dancing, when ';
$this->parent -> live();
}
}
除此之外,您应该将构造函数方法重命名为__construct
,这是PHP5中的建议名称。
答案 1 :(得分:2)
您没有在构造函数中调用setParent
这将解决它:
function Child($p){
echo 'A child is born :)';
$this->setParent($p);
}
答案 2 :(得分:0)
首先,使用__construct关键字在PHP5中使用构造函数的首选方法。
当您访问班级成员时,您应该使用$this
,如果您尝试parent
成员,则不会使用function setParent($p){
$parent = $p;
}
。
function setParent($p){
$this->parent = $p;
}
像这样:
function dance(){
echo 'The child is dancing, when ';
$parent -> live();
}
而且:
function dance(){
echo 'The child is dancing, when ';
$this->parent -> live();
}
对此:
$p = new Father();
$p -> live();
$c = new Child();
$c -> setParent($p);
$c -> dance();
你将以此结束:
setParent
您不需要将父项传递给子构造函数,因为您将在{{1}}方法中设置它。