2011-06-22 11 views
6

çocuk sınıfından çağrısı olmadan üst sınıfında Oto işletilen yapı için (?):nasıl otomatik sihirli bir çocuk sınıftan bir üst sınıf kurucusunu çağırmak için bir yol arıyorum

(Not: Bu sadece bir örnektir, bu yüzden yazmaya hataları) mevcut olabilir edilir

Class myParent() 
{ 
    protected $html; 

    function __construct($args) 
    { 
     $this->html = $this->set_html($args); 
    } 

    protected function set_html($args) 
    { 
     if ($args['foo'] === 'bar') 
      $args['foo'] = 'foobar'; 
     return $args; 
    } 
} 

Class myChild extends myParent 
{ 
    public function do_stuff($args) 
    { 
     return $this->html; 
    } 
} 

Class myInit 
{ 
    public function __construct($args) 
    { 
     $this->get_stuff($args); 
    } 

    public function get_stuff($args) 
    { 
     $my_child = new myChild(); 
     print_r($my_child->do_stuff($args)); 
    } 
} 

$args = array('foo' => 'bar, 'what' => 'ever'); 
new myInit($args); 

// Should Output: 
/* Array('foo' => 'foobar', 'what' => 'ever') */ 

ne (__construct($args) { parent::__construct($args); }) Sınıf myChild içine aramak zorunda olduğunu kaçınmak istiyorum.

Soru: Bu mümkün mü? Öyleyse nasıl?

Teşekkürler! Child olarak

+0

Neden parent :: __ construct() 'çağrısına karşısınız? – cspray

+1

PHP'nin uygulamamı da yazmasını istiyorum. –

+0

@Wesley van Opdorp Lütfen çözümü görün. Benim için çalışıyor. @Charles Sprayberry Bilinmeyen sayıda çocuk dersi ile uzayan bir taban sınıfım var ve bu yüzden tüm giriş argümanları için standart bir prosedürü çalıştırmam gerekiyor (geçersiz girdiyi düşürme, varsayılanları ayrıştırma, vb.) – kaiser

cevap

9

Örnek kodunuzda, myParent :: __ yapı zaten myChild öğesinden oluşan wen adını alacak. sadece sürece myChild hiçbir yapıcı olduğu gibi

public function get_stuff($args) 
    { 
     $my_child = new myChild($args); 
     print_r($my_child->do_stuff()); 
    } 

tarafından

public function get_stuff($args) 
{ 
    $my_child = new myChild(); 
    print_r($my_child->do_stuff($args)); 
} 

değiştirmek istediğiniz gibi kod işe almak için, ana kurucu kalıtsal/çağrılır.

+0

Mükemmel. +1. Onu sınıfın içine atabileceğimi ve ana kurucunun çağrıldığını anlayamadım. – kaiser

+1

Yardımı için teşekkürler;) – malko

+0

'myChild'in kurucusu olmadığı sürece, ana kurucu/devralınacak. 'Çok teşekkür ederim sooo! Neler olup bittiğini açıklayan bu basit ifadeyi bulmak için çok aradım! – Sliq

5

hiçbir yapıcı hediye verecek ve Parent uzanır, her zaman new Child()Parent yapıcı örtükdenilen olacaktır belirtilir.

Child yapıcı belirtecekseniz, belirtecini, örtülü olarak çağrılmayacak şekilde Child yapıcısını kullanmak zorundasınız. bir alt sınıfta bir kurucu tanımlarken

N.B herhangi bir örneği parametreleri ve durum kalıtsal başlatma alt sınıfı için önceden ayarlanmış olacak şekilde bir yöntem tanımı ilk satırında parent::__construct() aramak için en iyi yöntemdir.

İlgili konular