Php Inheritance

inheritance, oop, php

Solution

From PHP Manual:

The visibility of a property or method can be defined by prefixing the declaration with the keywords `public`, `protected` or `private`. Class members declared `public` can be accessed everywhere. Members declared `protected` can be accessed only within the class itself and by inherited and parent classes. Members declared as `private` may only be accessed by the class that defines the member.

class A
{
    public $prop1;     // accessible from everywhere
    protected $prop2;  // accessible in this and child class
    private $prop3;    // accessible only in this class
}

And No, this is not different from other languages implementing the same keywords.

Regarding your second edit and code snippet:

No, this should not give an error because `getBar()` is inherited from `Foo` and `Foo` has visibility to `$bar`. If `getBar()` was defined or overloaded in `Bar` it would not work. See http://codepad.org/rlSWx7SQ

Problem

I am using PHP 5.3 stable release and sometimes I encounter very inconsistent behaviours. As far as I know in inheritance all attributes and methods(private, public and protected) in super class are passed child class. ``` 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 ``` But when Foo::$_name attribute is defined "public" it doesn't give error. PHP has own OO rules??? Thanks Edit: Now all things are clear. Actually I was thinking in "inheritance" a new class is created and inherits all members independent from its ancestor. I didn't know "accessing" rules and inheritance rules are the same. Edit According to your comments this snippet should give an error. But it is working. ``` class Foo { private $bar = "baz"; public function getBar() { return $this->bar; } } class Bar extends Foo {} $o = new Bar; echo $o->getBar(); //baz ```

Original source