2010-02-08 18 views
34

में मैं कक्षा में किसी अन्य विधि के भीतर से किसी विधि का उपयोग करने का प्रयास कर रहा हूं। मुझे PHP5 ओओपी में ज्यादा अनुभव नहीं है, और मैंने जवाब के लिए चारों ओर देखा, लेकिन कोई भी नहीं मिला। मैं sendRequest() में getRientInfo() का उपयोग करने की कोशिश कर रहा हूं, जो एक ही कक्षा में है।एक ही विधि में एक विधि को कॉल करना एक ही PHP वर्ग

class DomainHandler { 

    public static function getClientInfo($db, $client_id) 
    { 
     //Do stuff 
    } 

    public static function sendRequest($details) 
    { 

     require_once('MySQL.class.php'); 
     $db = new MySQL; 

     getClientInfo($db, $client); 
    } 
} 

और यह मुझसे कहता है:

Fatal error: Call to undefined function getClientInfo()

मैं भी कोई लाभ नहीं हुआ

parent::getClientInfo($db, $client); 

और

$this->getClientInfo($db, $client); 

कोशिश की है।

कोई विचार?

उत्तर

40

यह एक स्थिर विधि है इसलिए आपको इसे self::getClientInfo या DomainHandler::getClientInfo से कॉल करना होगा।

इसके अलावा: आप ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग पर पढ़ना चाहेंगे क्योंकि ऐसा लगता है कि आपने अभी तक यह नहीं समझा है कि यह वास्तव में क्या है (यह केवल क्लास फू {और} के बीच फ़ंक्शंस नहीं डाल रहा है और उनके सामने सार्वजनिक स्थैतिक लगा रहा है)

+3

धन्यवाद! हां, मुझे पता है कि मैं पूर्ण ओओपी (PHP5) के बारे में बहुत कम जानता हूं, लेकिन दुर्भाग्यवश मेरे मालिक मुझे उस दिन कुछ पढ़ने के लिए नहीं देंगे जो वह तय करना चाहता है। :) टीभ, मैं वास्तव में नहीं जानता कि आपके पास विधि से पहले स्थिर और सार्वजनिक क्यों है ?? लेकिन मैं वहां जाऊंगा। मदद के लिए एक बार फिर से धन्यवाद। –

3

'स्वयं' कीवर्ड के लिए

ही कहा की तलाश कर रहे है, तो आप व्याख्या कर सकते हैं क्यों आप अपने तरीकों की जरूरत स्थिर होने के लिए? "स्थैतिक" खराब शैली है और इससे बचा जाना चाहिए।

+1

मैं यह नहीं कहूंगा कि 'स्थिर' खराब शैली है, इसलिए मैं इस मामले में सहमत हूं कि शायद यह सही ढंग से उपयोग नहीं किया जा सकता है। स्थैतिक स्थान होता है और कभी-कभी कुछ स्थिर नहीं बनना खराब शैली होगी। मैं मानता हूं कि बहुत से लोग स्थैतिक तरीकों का गलत इस्तेमाल करते हैं और केवल कक्षाओं का उपयोग करते हैं जैसे आप सी ++ नेमस्पेस का उपयोग केवल स्थिर विधियों => _that_ खराब शैली के साथ करेंगे। – dbemerlin

17

आप static के रूप में कार्य की घोषणा कर रहे हैं और इसलिए वे आप उन्हें DomainHandler::getClientInfo() या self::getClientInfo() साथ कॉल कर सकते हैं वस्तु संदर्भ – में नहीं हैं।

यदि आपको स्थिर होने के लिए फ़ंक्शंस की स्पष्ट रूप से आवश्यकता नहीं है, तो आप static कीवर्ड छोड़ सकते हैं और फिर $this->getClientInfo() काम करेंगे।

+0

और क्या होगा यदि वह विधि स्थिर होना चाहता है? – Natrium

+4

@ नट्रियम, तो वह पहले जो मैंने सुझाया है उसका उपयोग कर सकते हैं। –

+2

क्षमा करें, मेरी आंखों में रेत होनी चाहिए ... – Natrium

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