प्रश्न मेरी आवश्यकताओं को बेहतर ढंग से प्रतिबिंबित करने के लिए संपादित किया गया।कॉलिंग अभिभावक कक्षा के तरीके
निम्न उदाहरण लें:
class Base
{
public $Text = null;
public function __construct()
{
$this->Text = new Base_Text();
}
}
class Base_Text extends Base
{
public $Is = null;
public function __construct()
{
$this->Is = new Base_Text_Is();
}
public function CammelCase($string)
{
return trim(str_replace(' ', '', ucwords($string)));
}
}
class Base_Text_Is extends Base_Text
{
public function CammelCase($string)
{
return ($string === $this->CammelCase($string)); // doesn't work
}
}
मैं कैसे स्थिर Base_Text वर्ग बुला बिना Base_Text_Is::CammelCase()
विधि को ठीक कर सकते हैं (parent::
या Base_Text::
का उपयोग नहीं)?
function Base()
{
static $instance = null;
if (is_null($instance) === true)
{
$instance = new Base();
}
return $instance;
}
और यह करने के लिए Base_Text_Is::CammelCase()
पद्धति को बदलने:
return ($string === Base()->Text->CammelCase($string));
और क्रम में
एकमात्र समाधान मैं स्थितियों के इस प्रकार के लिए के साथ आया था इस तरह की एक सिंगलटन समारोह बनाने के लिए है बेस वर्ग के दो वस्तु उदाहरणों बनाने के बजाय, कर से बचने के लिए:
$base = new Base();
$base->Text->Is->CammelCase('MethodOverloading'); // true
मैं सिर्फ कार्य करें:
Base()->Text->Is->CammelCase('MethodOverloading'); // true
यह एक अच्छा अभ्यास है? क्या कोई अन्य समाधान है?
मैं डॉन ' Darrell के जवाब में अपनी आखिरी टिप्पणी नहीं प्राप्त करें। आप 'Base_Text' की गैर स्थैतिक गुणों तक पहुंचने में सक्षम नहीं हैं? आप उन्हें कहां से कॉल करना चाहते हैं? मुझे लगता है कि आपको इसे और समझा जाना चाहिए। –
@ फ़ेलिक्स: मैं उदाहरण को यथासंभव सरल रखने की कोशिश कर रहा हूं, ऐसे मामले हैं जब मैं मूल रूप से मूल विधि को कॉल नहीं कर सकता क्योंकि यह तत्काल गुणों पर निर्भर करता है। –