Php Kalıtım

2 Cevap php

Ben PHP 5.3 kararlı sürümü kullanıyorum ve bazen çok tutarsız davranışlar karşılaşabilirsiniz. Bildiğim kadarıyla miras tüm nitelikleri ve yöntemlerini bildiğimiz gibi (özel, kamu ve korumalı) süper sınıfta çocuk sınıfı geçirilir.

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

Foo :: $ _name niteliği "kamu" tanımlanan Ama ne zaman hata vermez. PHP OO kurallarını kendi vardır??

Teşekkürler

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

2 Cevap

Dan 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
}

Ve Hayır, bu aynı anahtar kelimeleri uygulayan diğer dillerden farklı değildir.

Regarding your second edit and code snippet:

getBar() Foo devralınan ve Foo $bar görünürlük vardır Hayır, çünkü bu bir hata vermemelidir. getBar() tanımlanmış veya aşırı ise Bar işe yaramaz. Bkz http://codepad.org/rlSWx7SQ

Sizin varsayımlar doğru değil. Korumalı ve kamu üyeleri 'geçti' vardır. Özel üye değildir. Bildiğim kadarıyla bu çok cepten dil için tipiktir.