PHP

2012-05-31 5 views
5

से PHP निजी चरणीय पहुंच इसलिए मैं PHP कक्षाओं को डिजाइन करने में एक समस्या का समाधान करने की कोशिश कर रहा हूं। मैंने एक बेस क्लास बनाया है, और निजी चर असाइन किया है। मेरे पास इस आधार वर्ग को विस्तारित करने वाले बाल वर्ग हैं, जो बेस क्लास के कार्यों के माध्यम से इन निजी चरों में संदर्भ और परिवर्तन करते हैं। यहाँ एक उदाहरण है, यह ध्यान रखें कि मैं अभी भी private और protected विधियों के बीच अंतर के बारे में उलझन में हूँ/चर (मुझे पता है कि अगर मैं गलत कर रहा हूँ है!):PHP

base.class.php

<?php 
class Base { 
    private $test; 
    public function __construct(){ 
     require('sub.class.php'); 
     $sub = new Sub; 
     echo($this->getTest()); 
    } 
    public function getTest(){ 
     return $this->test; 
    } 
    protected function setTest($value){ 
     $this->test = $value; 
    } 
} 
?> 

sub.class.php

<?php 
class Sub extends Base { 
    public function __construct(){ 
     parent::setTest('hello!'); 
    } 
} 
?> 

तो मैं परिणाम hello! स्क्रीन पर मुद्रित होने की उम्मीद थी - के बजाय कोई बात नहीं है। मेरे हिस्से पर कक्षाओं की मौलिक गलतफहमी हो सकती है, या शायद मैं कुछ गलत कर रहा हूं। कोई मार्गदर्शन बहुत सराहना की है! धन्यवाद।

संपादित करें:

जो कोई एक जवाब योगदान के लिए धन्यवाद - के रूप में यह कक्षाएं प्रतिनिधि इस बिंदु पर अधिक उपयोगी हो सकता है, -, मुझे लगता है कि उत्कृष्ट समाधान के बावजूद है कि बच्चे कक्षाओं वास्तव में कर रहे है कि मैं क्या करने की जरूरत नहीं मुझे वास्तव में अन्य वर्गों के भीतर से बेस फ़ंक्शंस को संदर्भित करने की आवश्यकता नहीं है।

+1

कोशिश गूंज ($ उप> getTest()); – bumperbox

+1

कोशिश करें [PHP5 ओओपी] (http://www.php.net/oop5)। – meze

+1

स्क्रीन – zerkms

उत्तर

8

इस तरह होना चाहिए:

base.class.php:

class Base { 
    private $test; 
    public function __construct() { 
     echo $this->getTest(); 
    } 
    public function getTest() { 
     return $this->test; 
    } 
    protected function setTest($value) { 
     $this->test = $value; 
    } 
} 

sub.class.php:

class Sub extends Base { 
    public function __construct() { 
     parent::setTest('hello!'); // Or, $this->setTest('hello!'); 
     parent::__construct(); 
    } 
} 

मुख्य कोड:

require 'base.class.php'; 
require 'sub.class.php'; 

$sub = new Sub; // Will print: hello! 
+2

पर मैं 'parent ::' को '$ this->' – zerkms

+0

के साथ भी बदल दूंगा, ठीक है, मैं देख सकता हूं कि यह मेरे विचार के विपरीत क्यों काम करता है। क्या कोई तरीका है कि मैं बच्चे के फ़ंक्शन से अभिभावक के सेटटेस्ट फ़ंक्शन का संदर्भ दे सकता हूं, ताकि कोड '$ this-> test = $ value' बच्चे के विपरीत माता-पिता के लिए चर सेट करता है? अगर मैं उन्हें बच्चे के कन्स्ट्रक्टर से बना सकता हूं तो मुझे आखिरकार कॉल नहीं करना पड़ेगा। मैं मूल रूप से अभिभावक कार्यों तक पहुंच बनाना चाहता हूं, उन्हें वारिस नहीं करना चाहता हूं। – iLoch

+0

@ILoch मैं आपका मतलब समझने में काफी समझ नहीं पा रहा हूं, लेकिन मेरे संपादित कोड पर एक नज़र डालें। क्या आप यही चाहते हैं? – flowfree