jso*_*onx 6 php oop inheritance
我正在使用PHP 5.3稳定版本,有时我会遇到非常不一致的行为.据我所知,在继承中,超类中的所有属性和方法(私有,公共和受保护)都是传递子类.
class Foo
{
private $_name = "foo";
}
class Bar extends Foo
{
public function getName()
{
return $this->_name;
}
}
$o = new Bar();
echo $o->getName();
//Notice: Undefined property: Bar::$_name in ...\test.php on line 11
Run Code Online (Sandbox Code Playgroud)
但是当Foo :: $ _ name属性定义为"public"时,它不会给出错误.PHP有自己的OO规则???
谢谢
编辑:现在一切都很清楚了.实际上我在思考"继承"时创建了一个新类,并且继承了独立于其祖先的所有成员.我不知道"访问"规则和继承规则是一样的.
编辑 根据您的评论,此代码段应该给出错误.但它正在发挥作用.
class Foo
{
private $bar = "baz";
public function getBar()
{
return $this->bar;
}
}
class Bar extends Foo
{}
$o = new Bar;
echo $o->getBar(); //baz
Run Code Online (Sandbox Code Playgroud)
Gor*_*don 12
来自PHP手册:
属性或方法的可见性可以通过用关键字前缀的声明来定义
public,protected或private.声明的类成员public可以随处访问.声明的成员protected只能在类本身以及继承和父类中访问.声明为的成员private只能由定义该成员的类访问.
class A
{
public $prop1; // accessible from everywhere
protected $prop2; // accessible in this and child class
private $prop3; // accessible only in this class
}
Run Code Online (Sandbox Code Playgroud)
不,这与实施相同关键字的其他语言没有什么不同.
关于您的第二个编辑和代码段:
不,这不应该给出错误,因为它getBar()是继承的,Foo并且Foo具有可见性$bar.如果getBar()已定义或超载,Bar则无效.见http://codepad.org/rlSWx7SQ