2010-11-24 17 views
6

मैं PHP 5.2पीएचपी में, यह एक समस्या का उपयोग कर एक स्थिर वर्ग समारोह कॉल करने के लिए है -> dereferencer

उपयोग कर रहा हूँ मैं निम्नलिखित कोड है:

class MyClass { 
    public function __construct() {} 

    public static function stuff() { 
     echo 'This is static! <br />'; 
    } 

} 

$myClass = new MyClass(); 

MyClass::stuff(); // Reference by class. 

$myClass->stuff(); // Reference by instance of class. 

दोनों ही मामलों में यहां उत्पादन काम करता है आउटपुट है:

यह स्थिर है!

यह स्थिर है!

क्या पहले बनाम संदर्भ के दूसरे तरीके का उपयोग करने में कोई समस्या है?

चूंकि मुझे उसी हस्ताक्षर के साथ एक गैर स्थैतिक कार्य करने की अनुमति नहीं है क्योंकि उपरोक्त स्थिर एक मुद्दा नहीं होगा। मैं फ़ंक्शन स्थिर होना चाहता हूं क्योंकि स्थैतिक कार्यों का उपयोग करते समय गति गति भी होती है।

क्या मुझे कुछ याद आ रहा है या यह है कि कैसे -> dereference वाक्यविन्यास यह संकेत नहीं देता है कि यह एक स्थिर कार्य है?

+0

अच्छा सवाल। :) –

+0

यह कार्यात्मक रूप से समतुल्य है। स्थैतिक कॉल केवल एक खाली स्थानीय दायरे के साथ चलाएगा, जबकि '->' कॉल में इस उदाहरण का $ होगा। "स्थैतिक" कीवर्ड आपके मामले के लिए अधिकतर एनओपी है, केवल स्वयं :: संदर्भों के लिए प्रासंगिक है। – mario

+0

@ मारियो, यह गलत है। किसी भी तरह से, यह एक स्थिर विधि है और '$ यह' उपलब्ध नहीं है। –

उत्तर

6

docs स्पष्ट रूप से कहते हैं कि यह ठीक है:

एक संपत्ति स्थिर के रूप में घोषित एक instantiated वर्ग वस्तु (हालांकि एक स्थिर विधि कर सकते हैं) से नहीं पहुंचा जा सकता है।

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

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