PHP में वर्ग विधियों की डिफ़ॉल्ट दृश्यता


118

मैंने मैनुअल को देखा , लेकिन मैं इसका जवाब नहीं ढूंढ सकता।

एक दृश्यता घोषणा के बिना तरीकों के लिए PHP में डिफ़ॉल्ट दृश्यता क्या है? क्या PHP में जावा की तरह पैकेज विजिबिलिटी है?

उदाहरण के लिए, निम्नलिखित कोड में, go()सार्वजनिक या निजी है?

class test {
  function go() {
  }
}

मैंने जो कारण पूछा है, वह यह है कि मैंने कई कंस्ट्रक्टर कोड लिखे हैं function __construct()और कुछ के रूप में public function __construct()। क्या वे समकक्ष हैं?

जवाबों:


179

डिफ़ॉल्ट सार्वजनिक है।

कक्षा के तरीकों को सार्वजनिक, निजी या संरक्षित के रूप में परिभाषित किया जा सकता है। बिना किसी स्पष्ट दृश्यता वाले कीवर्ड के घोषित तरीकों को सार्वजनिक रूप से परिभाषित किया गया है।

http://www.php.net/manual/en/language.oop5.visibility.php


11
समान गुण के लिए जाता है
Marc.2377

7
एक ही निरंतर के लिए चला जाता है।
कोलुय्या

22

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

और नहीं, PHP का कोई पैकेज दृश्यता नहीं है, मुख्यतः क्योंकि हाल ही में PHP में कोई पैकेज नहीं था।


16
@ इयान: मैं कहूंगा क्योंकि "स्पष्ट रूप से निहित से बेहतर है" (जैसा कि अजगर का ज़ेन कहता है)। यह अन्य प्रोग्रामर को मस्तिष्क चक्रों को बर्बाद करने का कारण बनता है, यह सोचकर कि यदि कंस्ट्रक्टर निजी या सार्वजनिक है या क्या। अगर लोग हमेशा एक्सेस मॉडिफ़ायर का इस्तेमाल करते थे तो मूल पोस्टर ने भी यह सवाल नहीं पूछा होगा।
उपयोगकर्ता

नोट के अलावा, जावा जैसी भाषाओं पर, डिफ़ॉल्ट पैकेज-निजी थे, एक हमेशा आश्चर्य होता है कि क्या यह डिजाइन द्वारा पैकेज-निजी है, या डेवलपर इसे निर्दिष्ट करना भूल गया (विशेष रूप से तब-वरिष्ठ डेवलपर्स के साथ काम करते समय)। इसलिए PMD में इस तरह के नियम शामिल हैं: pmd.github.io/pmd-5.5.2/pmd-java/rules/java/…
Johnco

9

डिफ़ॉल्ट सार्वजनिक है। संभवत: इसका कारण बैकवर्ड संगतता है क्योंकि पुराने कोड से यह सार्वजनिक होने की उम्मीद है (यदि यह सार्वजनिक नहीं था तो यह काम करना बंद कर देगा)।


तर्क के लिए यश।
गनी ओजसन


1

जब कोई दृश्यता कीवर्ड ( या public, ) का उपयोग नहीं किया जाता है, तो विधियाँ सार्वजनिक होंगी । लेकिन, आप इस तरह से गुणों को परिभाषित नहीं कर सकते। के लिए गुण , आप घोषणा पर एक दृश्यता कीवर्ड संलग्न करने के लिए की आवश्यकता होगी।privateprotected

उन संपत्तियों के लिए जिन्हें कक्षा में घोषित नहीं किया गया है और आप एक विधि के अंदर इसके लिए एक मूल्य प्रदान करते हैं, एक सार्वजनिक दृश्यता होगी।

<?php
class Example {
    public $name; 
    public function __construct() {
        $this -> age = 9; // age is now public
        $this -> privateFunction();
    }
    private function privateFunction() {
        $this -> country = "USA"; // this is also public
    }
}

0

function __construct()और public function __construct()एक ही विधि के नाम के रूप में काम करता है।

यदि आप विधि नाम के लिए उपसर्ग को परिभाषित नहीं कर सकते हैं, तो यह डिफ़ॉल्ट रूप से सार्वजनिक होना चाहिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.