2010-12-29 4 views
17

के रूप में सरणी घोषित करने के दो तरीके जब कक्षा सदस्य के रूप में सरणी घोषित करते हैं, तो इसे किस तरह से किया जाना चाहिए?PHP5। कक्षा सदस्य

class Test1 { 
    private $paths = array(); 

    public function __construct() { 
     // some code here 
    } 
} 

या

class Test2 { 
    private $paths; 

    public function __construct() { 
     $this->paths = array(); 
     // some code here 
    } 
} 

कौन सा अच्छा प्रथाओं और प्रदर्शन के मामले में बेहतर है? आप क्या सुझाव देंगे?

उत्तर

8

मैं कक्षा चर घोषित करते समय ऐसा करने का सुझाव दूंगा। कक्षाओं को विस्तारित करने में एक कन्स्ट्रक्टर को ओवरराइड किया जा सकता है, जिसके परिणामस्वरूप E_NOTICE या यहां तक ​​कि E_WARNINGs हो सकता है यदि आपका कोई भी फ़ंक्शन इस चर पर निर्भर करता है तो यह एक सरणी (यहां तक ​​कि एक खाली)

+1

हाँ, इससे कोई फर्क नहीं पड़ता! चूंकि PHP5 प्रलेखन कहता है: 'बाल वर्ग कन्स्ट्रक्टर को परिभाषित करता है तो स्पष्ट रूप से नहीं कहा जाता है'। – ezpresso

+7

"ओपी यह करने का सुझाव देगा" जब ओपी एक या/सवाल पूछता है? यह क्या है"? इसे कन्स्ट्रक्टर में या घोषणा के हिस्से के रूप में करना? – Adam

+0

@Adam: ओपी के लिए यह स्पष्ट था कि इसका क्या अर्थ है। शायद क्योंकि वह पूरी वाक्य पढ़ता है। – Mchl

5

यदि आप प्रारंभिकरण के दौरान गतिशील रूप से अपनी सरणी को पॉप्युलेट करने जा रहे हैं, तो इसे कन्स्ट्रक्टर में करें। यदि इसमें निश्चित मान हैं, तो इसे संपत्ति घोषणा में करें।

एक सरणी गतिशील रूप से एक पार्स त्रुटि में घोषणा परिणामों के भीतर (एक निश्चित समारोह या विधि का वापसी मान का उपयोग करके जैसे) को भरने के लिए कोशिश कर रहा है:

// Function call is not valid here 
private $paths = get_paths(); 

प्रदर्शन कोई वास्तविक यहाँ चिंता का विषय के रूप में प्रत्येक है नहीं है इसका अपना उपयोग मामला।

+0

धन्यवाद! क्या रचनाकार में ऐसा करने पर कोई प्रदर्शन जुर्माना है? – ezpresso

+0

@ezpresso: मुझे पता नहीं है कि यह महत्वपूर्ण नहीं है। – BoltClock

1

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

5

सामान्य रूप से, क्योंकि मैं अधिकतर अन्य भाषाओं में लिखता हूं PHP, मैं कन्स्ट्रक्टर के बाहर अपने इंस्टेंस चर घोषित करना चाहता हूं। यह मुझे कक्षा के शीर्ष पर देखने देता है और कोड को पढ़ने के बिना सभी गुणों और उनके एक्सेस संशोधक के लिए एक विचार प्राप्त करता है।

उदाहरण के लिए, मैं वास्तव में इस

// ... 
// whole bunch of code 
// ... 
public function initialize() { 
    $this->foo = array(); 
    // some other code to add some stuff to foo 
} 

तरह के तरीकों अब पसंद नहीं है, अगर मैं सिर्फ वर्ग को देखो, मुझे यकीन है कि एक चर foo भी उपलब्ध है नहीं हो सकता। यदि ऐसा है, तो मुझे नहीं पता कि मेरे पास उदाहरण के बाहर कहीं से भी इसका उपयोग है या नहीं।

तो बेहतर होगा आप मेरे पास है:

public $foo = array(); 
मेरी कक्षा के शीर्ष पर

, मुझे पता है कि foo एक उदाहरण संपत्ति है, और मैं इसे कहीं और से पहुँच सकते हैं।