2009-06-29 8 views
6

में ओवरराइड तरीकों मैं इस प्रकार माता-पिता और बच्चे श्रेणियां होती हैं:एक्सेस करना माता पिता के गुण और PHP

abstract class ParentObj { 
    private $data; 
    public function __construct(){ 
     $this->data = array(1,2,3); 
     var_dump($this->data); 

     $this->method(); 
    } 
    public function method(){ 
     echo "ParentObj::method()"; 
    } 
} 
class ChildObj extends ParentObj { 
    public function __construct(){ 
     parent::__construct(); 
     var_dump($this->data); 
    } 
    public function method(){ 
     echo "ChildObj::method()"; 
    } 
} 

उम्मीद उत्पादन:

array(1,2,3) 
ChildObj::method() 
array(1,2,3) 

वास्तविक उत्पादन:

array(1,2,3) 
ParentObj::method() 
NULL 

समस्या यह है कि बच्चा ऑब्जेक्ट डेटा प्रॉपर्टी तक नहीं पहुंच सकता है और माता-पिता ठंड में ओवरराइड विधि को कॉल करने से इनकार करते हैं घ।

क्या मैं कुछ गलत कर रहा हूं, या क्या किसी के पास कोई विचार है?

संपादित करें: मैं स्पष्ट करना चाहिए कि मैं के रूप में $child = new ChildObj()

+0

ठीक है, संरक्षित करने के लिए निजी को बदलने से संपत्ति का उपयोग ठीक हो जाता है। –

उत्तर

0

ठीक है, समस्या वास्तव में निजी रूप से घोषित की गई थी, मेरी पोस्ट में सार्वजनिक नहीं, इस प्रकार $ डेटा संपत्ति के समान लक्षण पीड़ित था।

10

एक ChildObj instantiating हूँ आप data निजी के रूप में घोषित किया है इसलिए ChildObj इसे उपयोग करने में सक्षम नहीं होगा - आप इसे बजाय संरक्षित करने की जरूरत है:

protected $data; 

मेरे पीएचपी (5.2.8) प्रिंट ChildObj::method() - आप एक पुराने संस्करण चल रहे हैं?

+0

मैं PHP 5.2.5 का उपयोग कर रहा हूँ –

संबंधित मुद्दे