PHP devralınmıştır ana yöntem çocuğun özel özelliğine erişemez

0 Cevap php

First of all: A quite similar problem yayınlanan ve her nasılsa zaten çözüldü, ama hala benim özel sorunun cevap vermiyor olmuştur. Bu konuda daha sonra.

In words: I have a base class which provides some methods to all childs, but doesn't contain any property. My child is inheriting these methods, which should be used to access the child's properties. If the child's property is protected or public, all works fine, but if the child's property is private, it fails without error (just nothing happens).

In code:

class MyBaseClass {
    public function __set($name, $value) {
        if(!property_exists($this, $name))
            throw new Exception("Property '$name' does not exist!");
        $this->$name = $value;
    }
}

class ChildClass extends MyBaseClass {
    public $publicProperty;
    protected $protectedProperty;
    private $privateProperty;
}

$myChild = new ChildClass();
$myChild->publicProperty = 'hello world';    //works of course!
$myChild->protectedProperty = 'hello world'; //works as expected
$myChild->privateProperty = 'hello world';   //doesn't work?

Yukarıda belirtilen benzer bir sorun özel özelliklerine erişmek için sihirli __set() yöntemi kullanmak için bir çözüm var, ama bu zaten yapıyorum. Ben çocuğun içinde __set() uygularsanız, elbette çalışır, ancak fikir çocuğun bir ailesi var gelen __set() devralan, ama tabii ki bu çocuğun özel erişemiyor yöntemi.

Bu amaçla açık mı? Yanlış bir şey doinf muyum? ya da benim yaklaşım sadece tasarım tarafından bok nedir?

Background: My original idea was: The whole dynamic thing about __set() is something I don't like. Usually a private property should never be accessible from outside, so I implemented throwing __set- and __get-methods in my ultimate base class (from which all classes inherit).

Şimdi dynamicially bir XML dosyası bir örneğini spawn isteyen ve bu nedenle özelliklerine erişimi gerekir. Ben herhangi bir XML-instantiatable sınıf sihirli __set() yöntemi uygulamak ve böylece dynamicially oluşturulabilir ihtiyacı olduğunu, kural yaptı. Bunun yerine bir gün kökenli olabilir her Sınıf içinde uygulanması, onları class Spawnable { } hangi ihtiyaç __ set-yöntem sağlar gibi adlandırılan bir sınıftan miras yapmaya karar verdi.

0 Cevap