2012-05-06 64 views
0

我是写OOP的新手。我必须声明从父类继承的变量吗? (PHP 5.3.2)

我认为父级的属性是由子级自动继承的,除非在子级中定义。

我有一个父类,如:

class parentClass { 
    public $name; 
} 
. 
. 
. 

class childClass extends parentClass { 
    protected $id; 
    protected $frontend_name; 
} 

当我尝试加载它们,我得到这个错误:

PHP致命错误:访问级别childClass :: $名称必须是公共的(如在class parentClass中)在2571行/var/wwww/model.php上

这是为什么?

+0

你打电话的方式? –

回答

2

随着代码:

class parentClass { 
    public $name = 'foo'; 
} 

class childClass extends parentClass { 
    protected $id; 
    protected $frontend_name; 
} 

从子类中调用

$child = new childClass; 
echo $child->name; 

或者从父类调用

$parent = new parentClass; 
echo $parent->name; 

结果:

foo 
+0

谢谢加百列。我也这么想。我不知道为什么我有这个错误。我改变了任何东西,但resaved文件和错误消失。 –

+0

欢迎您! –

-1

再次声明变量会引发错误,因为您已经从父类继承了它们。所以,不,你不能声明从父类继承的变量。

+0

我可以定义覆盖var。 “ –

+1

”再次声明变量会引发错误,因为您已经从父类继承了它们,所以,不,您不能声明从父类继承的变量。“ 这是完全错误的。谢谢你浪费我的时间,哈利。 –

+1

BZZT!哦,我很抱歉,但是感谢您的参与!除非在超类中被声明为“最终”,否则你可以在子类中覆盖任何你喜欢的东西。唯一的限制是成员可见性,当你重新声明它时,你不能减少成员的可见性。在超类中公开的东西不能在子类中重新声明为私有或受保护。 – GordonM