PHP 5 में, उपयोग करने const
और के बीच क्या अंतर है static
?
प्रत्येक उपयुक्त कब है? और क्या भूमिका करता है public
, protected
और private
खेलता है - यदि कोई हो?
PHP 5 में, उपयोग करने const
और के बीच क्या अंतर है static
?
प्रत्येक उपयुक्त कब है? और क्या भूमिका करता है public
, protected
और private
खेलता है - यदि कोई हो?
जवाबों:
एक वर्ग के संदर्भ में, स्थिर चर वर्ग के दायरे (वस्तु नहीं) दायरे पर होते हैं, लेकिन एक कास्ट के विपरीत, उनके मूल्यों को बदला जा सकता है।
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.
सार्वजनिक, संरक्षित और निजी बाधा के संदर्भ में अप्रासंगिक हैं (जो हमेशा सार्वजनिक होते हैं); वे केवल स्थिर चर सहित वर्ग चर के लिए उपयोगी हैं।
संपादित करें: यह ध्यान रखना महत्वपूर्ण है कि PHP 7.1.0 ने कक्षा में रहने वाले लोगों की दृश्यता को निर्दिष्ट करने के लिए समर्थन पेश किया ।
$
? static $my_var = 10;
परिभाषा में
static
चर एकल और पुनरावर्ती कार्यों में भी बहुत उपयोगी हैं। क्योंकि आप मान बदल सकते हैं लेकिन चर केवल एक बार आरंभिक होगा। कैसे एक एकल बनाने के लिए आगे की व्याख्या के लिए stackoverflow.com/questions/203336/… देखें । मेरे लिए वे कुछ स्थितियाँ हैं जिनमें मैं स्थिर चर पसंद करता हूँ।
एक अंतिम बिंदु जो बनाया जाना चाहिए वह यह है कि एक कांस्टेबल हमेशा स्थिर और सार्वजनिक होता है। इसका मतलब यह है कि आप कक्षा के भीतर से कास्ट को इस तरह एक्सेस कर सकते हैं:
class MyClass
{
const MYCONST = true;
public function test()
{
echo self::MYCONST;
}
}
कक्षा के बाहर से आप इसे इस तरह एक्सेस करेंगे:
echo MyClass::MYCONST;
लगातार बस एक स्थिर है, यानी आप घोषित करने के बाद इसके मूल्य को बदल नहीं सकते हैं।
स्थैतिक चर एक वर्ग का उदाहरण बनाए बिना सुलभ है और इसलिए एक वर्ग के सभी उदाहरणों के बीच साझा किया जाता है।
इसके अलावा, एक फ़ंक्शन में एक स्थिर स्थानीय चर हो सकता है जिसे केवल एक बार (किसी फ़ंक्शन के पहले निष्पादन पर) घोषित किया जाता है और फ़ंक्शन कॉल, उदाहरण के बीच इसके मूल्य को संग्रहीत कर सकता है:
function foo()
{
static $numOfCalls = 0;
$numOfCalls++;
print("this function has been executed " . $numOfCalls . " times");
}
जब क्लास इनहेरिटेंस के बारे में बात कर रहे हैं, तो आप शब्दों 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"
दूसरे शब्दों self::
में, स्थिर संपत्ति को संदर्भित करता है और उसी दायरे से स्थिर होता है जहां इसे बुलाया जा रहा है (इस मामले में Person
सुपरक्लास), जबकि static::
संपत्ति और निरंतर समय में गुंजाइश से संपत्ति तक पहुंच जाएगी (इसलिए इस मामले में)Pirate
उपवर्ग )।
आगे पढ़ें स्थैतिक बाइंडिंग यहाँ php.net पर ।
एक अन्य प्रश्न के उत्तर की जाँच यहाँ और यहाँ भी करें ।
एक वर्ग विधि या संपत्ति को स्थैतिक घोषित करने से वर्ग की तात्कालिकता की आवश्यकता के बिना उन्हें सुलभ बनाया जा सकता है।
एक वर्ग स्थिरांक एक सामान्य स्थिरांक की तरह होता है, इसे रनटाइम में नहीं बदला जा सकता है। यह भी एकमात्र कारण है जिसके लिए आप कभी भी कास्ट का उपयोग करेंगे।
निजी, सार्वजनिक और संरक्षित एक्सेस मॉडिफायर हैं जो बताते हैं कि कौन पैरामीटर / विधि का उपयोग कर सकता है।
सार्वजनिक का मतलब है कि अन्य सभी वस्तुओं को एक्सेस मिलता है। निजी का मतलब है कि केवल तात्कालिक वर्ग को ही प्रवेश मिलता है। संरक्षित का अर्थ है कि तात्कालिक वर्ग और व्युत्पन्न वर्ग तक पहुँच प्राप्त होती है।
यहाँ स्थिर सदस्य, निरंतर चर और पहुँच संशोधक (निजी, सार्वजनिक और संरक्षित) के बारे में अब तक सीखी गई बातें हैं। स्थिर
परिभाषा
जैसा कि नाम का कहना है कि एक स्थिर चर के मूल्यों को बदला नहीं जा सकता है। संयोजक सामान्य चर से भिन्न होते हैं कि आप $ प्रतीक का उपयोग उन्हें घोषित करने या उपयोग करने के लिए नहीं करते हैं।
मान एक स्थिर अभिव्यक्ति होना चाहिए, न कि (उदाहरण के लिए) एक चर, एक संपत्ति, एक गणितीय ऑपरेशन का परिणाम या एक फ़ंक्शन कॉल।
नोट: चर का मान कोई कीवर्ड नहीं हो सकता है (उदाहरण के लिए स्व, माता-पिता और स्थैतिक)।
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
?>
स्थिर
परिभाषा
स्टेटिक कीवर्ड का उपयोग क्लास, मेम्बर फंक्शन या वेरिएबल को घोषित करने के लिए किया जा सकता है। क्लास में ग्लोबल सदस्यों को सेल्फ कीवर्ड के साथ ही एक्सेस किया जा सकता है। क्लास की प्रॉपर्टीज या तरीकों को स्टैटिकली बनाते हुए उन्हें क्लास की तात्कालिकता की जरूरत के बिना एक्सेस किया जा सकता है। । स्थिर घोषित की गई संपत्ति को तत्काल श्रेणी की वस्तु (हालांकि एक स्थिर विधि) के साथ एक्सेस नहीं किया जा सकता है। यदि कोई दृश्यता घोषणा (सार्वजनिक, निजी, संरक्षित) का उपयोग नहीं किया जाता है, तो संपत्ति या विधि को सार्वजनिक के रूप में घोषित किया जाएगा। क्योंकि स्थिर तरीके से बनाई गई वस्तु के उदाहरण के बिना कॉल करने योग्य हैं।
नोट: छद्म-चर $ यह स्थिर के रूप में घोषित विधि के अंदर उपलब्ध नहीं है। तीर संचालक का उपयोग करके वस्तु के माध्यम से भौतिक गुणों तक पहुँचा नहीं जा सकता है ->
PHP 5.3.0 के रूप में, एक चर का उपयोग करके वर्ग को संदर्भित करना संभव है। > चर का मान कोई कीवर्ड नहीं हो सकता (जैसे स्वयं, माता-पिता और स्थैतिक)।
स्थिर संपत्ति उदाहरण
<?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";
?>
सार्वजनिक, निजी, संरक्षित (AKA पहुंच संशोधक)
नीचे दी गई परिभाषा को पढ़ने से पहले, इस लेख को एनकैप्सुलेशन के बारे में पढ़ें। यह आपको अवधारणा को अधिक गहराई से समझने में मदद करेगा
ट्यूटोरियल एनकैप्सुलेशन के बारे में लिंक को इंगित करते हैं
परिभाषा
निजी, सार्वजनिक, संरक्षित कीवर्ड का उपयोग करके आप कक्षा में सदस्यों तक पहुंच को नियंत्रित कर सकते हैं। सार्वजनिक घोषित वर्ग के सदस्यों को हर जगह पहुँचा जा सकता है। संरक्षित घोषित किए गए सदस्यों को केवल कक्षा के भीतर और विरासत और मूल कक्षाओं द्वारा ही पहुँचा जा सकता है। निजी घोषित किए गए सदस्यों को केवल उस वर्ग द्वारा पहुँचा जा सकता है जो सदस्य को परिभाषित करता है।
उदाहरण
<?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 डॉक्टर के बारे में अधिक जानकारी के लिए इस php प्रलेखन को पढ़ें
संदर्भ: php.net
मुझे उम्मीद है कि आप अवधारणा को समझ गए होंगे। पढ़ने के लिए धन्यवाद :) :) एक अच्छा है
तो @ महान जवाब पर फिर से बनाने के लिए:
यदि आपकी जरूरत की संपत्ति को बदला नहीं जाना चाहिए, तो एक निरंतर उचित विकल्प है
यदि आपको आवश्यक संपत्ति को बदलने की अनुमति है, तो इसके बजाय स्थैतिक का उपयोग करें
उदाहरण:
class User{
private static $PASSWORD_SALT = "ASD!@~#asd1";
...
}
class Product{
const INTEREST = 0.10;
...
}
संपादित करें: यह ध्यान रखना महत्वपूर्ण है कि PHP 7.1.0 ने कक्षा में रहने वाले लोगों की दृश्यता को निर्दिष्ट करने के लिए समर्थन पेश किया ।
self::$variable
संरक्षित स्थिर और निजी स्थिर चरों के लिए उपयोग करना पसंद करता हूं क्योंकि मैं कक्षा के नाम को केवल एक बार अपने भीतर रखना चाहता हूं जो कि कक्षा की शुरुआत में है।