PHP5 में, const
और static
का उपयोग करने के बीच क्या अंतर है? जब प्रत्येक उचित है? और क्या भूमिका public
, protected
और private
खेलने करता है - यदि कोई हो।PHP5: कॉन्स बनाम स्थैतिक
उत्तर
कक्षा के संदर्भ में, स्थैतिक चर वर्ग वर्ग (वस्तु नहीं) दायरे पर हैं, लेकिन एक स्थिरांक के विपरीत, उनके मूल्यों को बदला जा सकता है।
class ClassName {
static $my_var = 10; /* defaults to public unless otherwise specified */
const MY_CONST = 5;
}
echo ClassName::$my_var; // returns 10
echo ClassName::MY_CONST; // returns 5
ClassName::$my_var = 20; // now equals 20
ClassName::MY_CONST = 20; // error! won't work.
लोक, संरक्षित, और निजी consts के संदर्भ में अप्रासंगिक हैं (जो हमेशा सार्वजनिक कर रहे हैं); वे स्थिर चर सहित वर्ग चर, के लिए उपयोगी होते हैं।
- क्लासनाम :: $ चर के माध्यम से सार्वजनिक स्थैतिक चर का उपयोग कहीं भी किया जा सकता है।
- संरक्षित स्थैतिक चर को परिभाषित वर्ग या क्लासनाम :: $ चर के माध्यम से कक्षाओं तक विस्तारित किया जा सकता है।
- निजी स्थैतिक चर केवल className :: $ चर के माध्यम से परिभाषित करने वर्ग द्वारा पहुँचा जा सकता।
संपादित करें: यह ध्यान रखें कि PHP 7.1.0 introduced support for specifying the visibility of class constants महत्वपूर्ण है।
कक्षा विधि या संपत्ति को स्थिर के रूप में घोषित करना कक्षा के तत्कालता के बिना उन्हें सुलभ बनाता है।
एक वर्ग निरंतर सामान्य स्थिरता की तरह है, इसे रनटाइम पर बदला नहीं जा सकता है। यह भी एकमात्र कारण आप हमेशा के लिए स्थिरांक प्रयोग करेंगे।
निजी, सार्वजनिक और संरक्षित एक्सेस संशोधक हैं जो वर्णन करते हैं कि कौन सा पैरामीटर/विधि एक्सेस कर सकता है।
सार्वजनिक माध्यम से सभी अन्य वस्तुओं तक पहुंच प्राप्त होती है। निजी का मतलब है कि केवल तत्काल कक्षा को पहुंच मिलती है। संरक्षित मतलब है कि तत्काल कक्षा और व्युत्पन्न कक्षाओं तक पहुंच प्राप्त होती है।
लगातार सिर्फ एक स्थिर है, यानी आप घोषित करने के बाद अपने मूल्य नहीं बदल सकते।
स्टेटिक परिवर्तनीय कक्षा के उदाहरण के बिना सुलभ है और इसलिए कक्षा के सभी उदाहरणों के बीच साझा किया जाता है।
इसके अलावा, वहाँ एक समारोह है कि केवल एक बार (एक समारोह के पहले निष्पादन पर) घोषित किया जाता है और समारोह कॉल के बीच अपने मूल्य स्टोर कर सकते हैं में एक स्थिर स्थानीय चर हो सकता है उदाहरण:
function foo()
{
static $numOfCalls = 0;
$numOfCalls++;
print("this function has been executed " . $numOfCalls . " times");
}
एक आखिरी बिंदु जिसे बनाया जाना चाहिए वह यह है कि एक स्थिर हमेशा स्थिर और सार्वजनिक होता है।इसका मतलब यह है कि आप ऐसा तरह वर्ग के भीतर से स्थिरांक पहुँच सकते हैं:
echo MyClass::MYCONST;
यह घोषणा सच है? कि "कॉन्स हमेशा स्थिर और सार्वजनिक है"? –
यह अब सत्य नहीं है। PHP 7.1 वर्ग स्थिरांक के रूप में निजी या संरक्षित घोषित किया जा सकता है। देखें [आरएफसी] (https://wiki.php.net/rfc/class_const_visibility) – DisgruntledGoat
तो @Matt महान जवाब पर संक्षेप में:
class MyClass
{
const MYCONST = true;
public function test()
{
echo self::MYCONST;
}
}
कक्षा के बाहर से आप इसे इस तरह का उपयोग होता
तो स्थिरांक एक विकल्प नहीं हैं ज्यादातर स्थितियों में आप एक निजी/संरक्षित स्टेटिक संपत्ति की आवश्यकता होगी।
संपत्ति आप की जरूरत सार्वजनिक रूप से उपलब्ध करने के लिए है, लेकिन नहीं बदला है, एक निरंतर उचित विकल्प है।
उदाहरण:
class User{
private static $PASSWORD_SALT = "[email protected]~#asd1";
...
}
class Product{
const INTEREST = 0.10;
...
}
जब वर्ग विरासत आप self
और static
प्रमुख शब्दों का उपयोग करके निरंतर या अलग-अलग दायरों में चर के बीच अंतर कर सकते हैं बारे में बात कर।
class Person
{
static $type = 'person';
const TYPE = 'person';
static public function getType(){
var_dump(self::TYPE);
var_dump(static::TYPE);
var_dump(self::$type);
var_dump(static::$type);
}
}
class Pirate extends Person
{
static $type = 'pirate';
const TYPE = 'pirate';
}
और फिर कार्य करें::
$pirate = new Pirate();
$pirate::getType();
या:
Pirate::getType();
आउटपुट: इस उदाहरण जो तक पहुंचने का तरीका क्या दिखाता है की जाँच करें
string(6) "person"
string(6) "pirate"
string(6) "person"
string(6) "pirate"
यहाँ बातें मैं अब तक स्थिर सदस्यों के बारे में सीखा है, लगातार चर और पहुँच संशोधक (, निजी सार्वजनिक और सुरक्षित)। लगातार
परिभाषा
नाम की तरह कहते हैं एक निरंतर चर के मान changed.Constants कि में सामान्य चर से अलग आप यह घोषणा करते या उनका उपयोग करने के लिए $ प्रतीक का उपयोग नहीं करते नहीं किया जा सकता ।
मूल्य स्थिर अभिव्यक्ति, नहीं (उदाहरण के लिए) एक चर, एक संपत्ति, गणितीय प्रक्रिया का एक परिणाम है, या एक समारोह कॉल किया जाना चाहिए।
नोट: चर का मान एक कीवर्ड नहीं हो सकता है (उदा। स्वयं, पैरेंट और स्थैतिक)।
php में एक निरंतर घोषणा
<?php
class constantExample{
const CONSTANT = 'constant value'; //constant
}
?>
लगातार की गुंजाइश वैश्विक है और एक आत्म कीवर्ड
<?php
class MyClass
{
const CONSTANT = 'constant value';
function showConstant() {
echo self::CONSTANT . "\n";
}
}
echo MyClass::CONSTANT . "\n";
$classname = "MyClass";
echo $classname::CONSTANT . "\n"; // As of PHP 5.3.0
$class = new MyClass();
$class->showConstant();
echo $class::CONSTANT."\n"; // As of PHP 5.3.0
?>
स्टेटिक का उपयोग कर पहुँचा जा सकता है
परिभाषा
स्टेटिक कीवर्ड का उपयोग क्लास, सदस्य फ़ंक्शन या वेरिएबल घोषित करने के लिए किया जा सकता है। क्लास में स्टेटिक सदस्य ग्लोबल को एक स्व-कीवर्ड का उपयोग करके भी एक्सेस किया जा सकता है। कक्षा गुणों या विधियों को स्थिर करने के लिए उन्हें तत्काल आवश्यकता के बिना सुलभ बनाता है कक्षा का स्थैतिक के रूप में घोषित संपत्ति को तत्काल वर्ग वस्तु (हालांकि एक स्थिर विधि कर सकते हैं) के साथ उपयोग नहीं किया जा सकता है। यदि कोई दृश्यता घोषणा (सार्वजनिक, निजी, संरक्षित) का उपयोग नहीं किया जाता है, तो संपत्ति या विधि का इलाज किया जाएगा जैसे कि इसे सार्वजनिक घोषित किया गया था। क्योंकि स्थैतिक विधियां बनाई गई वस्तु के उदाहरण के बिना कॉल करने योग्य हैं।
नोट: ->
के रूप में पीएचपी 5.3.0 के रूप में static.Static गुण तीर ऑपरेटर का उपयोग वस्तु के माध्यम से पहुँचा नहीं जा सकता इस छद्म चर $ विधि घोषित अंदर उपलब्ध नहीं है , एक चर का उपयोग कर वर्ग का संदर्भ देना संभव है। > चर का मान एक कीवर्ड नहीं हो सकता है (उदा। स्वयं, अभिभावक और स्थैतिक)।
स्टेटिक संपत्ति उदाहरण
<?php
class Foo
{
public static $my_static = 'foo'; //static variable
public static function staticValue() { //static function example
return self::$my_static; //return the static variable declared globally
}
}
?>
स्थिर गुणों और कार्यों उदाहरण
<?php
print Foo::$my_static . "\n";
$foo = new Foo();
print $foo->staticValue() . "\n";
print $foo->my_static . "\n"; // Undefined "Property" my_static
print $foo::$my_static . "\n";
$classname = 'Foo';
print $classname::$my_static . "\n"; // As of PHP 5.3.0
print Bar::$my_static . "\n";
$bar = new Bar();
print $bar->fooStatic() . "\n";
?>
सार्वजनिक, निजी, संरक्षित (A.K.A पहुँच संशोधक)
को एक्सेस करनानीचे परिभाषा को पढ़ने से पहले, Encapsulation यह के बारे में इस लेख को पढ़ने के आप अवधारणा और अधिक गहराई से समझने के लिए
Tutorials point link about encapsulation
परिभाषा
निजी, सार्वजनिक उपयोग करना मदद मिलेगी, संरक्षित कीवर्ड जो आप कक्षा में सदस्यों तक पहुंच नियंत्रित कर सकते हैं। कक्षा के सदस्यों ने घोषित किया कि जनता को हर जगह पहुंचा जा सकता है। घोषित सदस्यों को संरक्षित किया जा सकता है केवल कक्षा के भीतर और वंचित और अभिभावक वर्गों द्वारा ही। सदस्यों को निजी घोषित किया जा सकता है केवल सदस्य द्वारा परिभाषित किया जा सकता है जो सदस्य को परिभाषित करता है।
उदाहरण
<?php
class Example{
public $variable = 'value'; // variable declared as public
protected $variable = 'value' //variable declared as protected
private $variable = 'value' //variable declared as private
public function functionName() { //public function
//statements
}
protected function functionName() { //protected function
//statements
}
private function functionName() { //private function
//statements
}
}
?>
सार्वजनिक, निजी तक पहुंचना और उसे संरक्षित सदस्यों उदाहरण
सार्वजनिक चर के पहुँचा और वर्ग बाहर से या वर्ग के भीतर संशोधित किया जा सकता। लेकिन आप केवल कक्षा के अंदर से निजी और संरक्षित चर और कार्यों तक पहुंच सकते हैं, आप कक्षा के बाहर संरक्षित या सार्वजनिक सदस्यों के मूल्य को संशोधित नहीं कर सकते हैं।
<?php
class Example{
public $pbVariable = 'value';
protected $protVariable = 'value';
private $privVariable = 'value';
public function publicFun(){
echo $this->$pbVariable; //public variable
echo $this->$protVariable; //protected variable
echo $this->privVariable; //private variable
}
private function PrivateFun(){
//some statements
}
protected function ProtectedFun(){
//some statements
}
}
$inst = new Example();
$inst->pbVariable = 'AnotherVariable'; //public variable modifed from outside
echo $inst->pbVariable; //print the value of the public variable
$inst->protVariable = 'var'; //you can't do this with protected variable
echo $inst->privVariable; // This statement won't work , because variable is limited to private
$inst->publicFun(); // this will print the values inside the function, Because the function is declared as a public function
$inst->PrivateFun(); //this one won't work (private)
$inst->ProtectedFun(); //this one won't work as well (protected)
?>
अधिक जानकारी के लिए दृश्यता के बारे में इस php दस्तावेज़ पढ़ें Visibility Php Doc
संदर्भ: php.net
मुझे आशा है कि आप अवधारणा को समझा। पढ़ने के लिए धन्यवाद :) :) एक अच्छा एक
- 1. कॉन्स बनाम नई कॉन्स
- 2. कॉन्स बनाम स्टेटिक कॉन्स
- 3. उद्देश्य सी कॉन्स एनएसएसटींग * बनाम एनएसएसटींग * कॉन्स
- 4. कॉन्स चर के लिए स्थैतिक जोर?
- 5. कॉन्स स्ट्रिंग बनाम #define
- 6. स्थिर कॉन्स बनाम #define
- 7. PHP5
- 8. php5
- 9. "बाहरी कॉन्स" बनाम "बाहरी" केवल
- 10. स्थैतिक चर बनाम सदस्य
- 11. लिंकिंग: स्थैतिक बनाम गतिशील
- 12. वर्चुअल फ़ंक्शन कॉन्स बनाम वर्चुअल फ़ंक्शन गैर-कॉन्स
- 13. स्थिरांक PHP5 में पीएचपी
- 14. वैश्विक बनाम फ़ंक्शन बनाम स्थैतिक वर्ग विधि
- 15. कॉन्स शुद्धता: कॉन्स चार कॉन्स * कॉन्स गेटनाम कॉन्स (// सामान);
- 16. वैश्विक स्थैतिक कॉन्स वैरिएबल कब शुरू किए जा रहे हैं?
- 17. स्थैतिक चर का उपयोग करने वाली कॉन्स विधि
- 18. याहू PHP5 Sdk yos-social-php5
- 19. स्थैतिक बनाम बाहरी "सी"/"सी ++"
- 20. स्थैतिक वर्ग बनाम सिंगलटन वर्ग
- 21. कैसे PHP5
- 22. PHP5: DOMDocument
- 23. मैकपोर्ट्स PHP5
- 24. कैसे PHP5
- 25. सी ++ स्ट्रिंग अक्षर बनाम कॉन्स स्ट्रिंग्स
- 26. स्थैतिक पाठक क्षेत्र प्रारंभिक बनाम स्थैतिक कन्स्ट्रक्टर प्रारंभिक
- 27. सार्वजनिक स्थैतिक बनाम स्थैतिक जनता - क्या कोई अंतर है?
- 28. कॉन्स (टी कॉन्स *)
- 29. कॉन्स रेफ
- 30. कॉन्स रेफरेंस
मैं सुरक्षित स्थिर और निजी स्थैतिक चर के लिए 'self :: $ variable' का उपयोग करना पसंद करता हूं क्योंकि मैं कक्षा के नाम को केवल एक ही बार में वर्णित करना चाहता हूं जो बहुत ही है कक्षा की शुरुआत – Lukman
हां, अच्छा बिंदु, मैंने यह उल्लेख करने की उपेक्षा की कि वर्ग के भीतर से संदर्भित होने पर स्वयं कीवर्ड का उपयोग किया जा सकता है। ऊपर दिए गए उदाहरण कक्षा परिभाषा के बाहर किए गए थे, इस मामले में कक्षा का नाम इस्तेमाल किया जाना चाहिए। –
ग्रेट उत्तर, स्वीकार करने के बहुत करीब है। क्या आप कृपया एक बिंदु स्पष्ट कर सकते हैं: "सार्वजनिक, संरक्षित और निजी कॉन्स के संदर्भ में अप्रासंगिक हैं" - क्यों? डिफ़ॉल्ट रूप से सभी जनता के आधार पर हैं? सभी निजी? –