मैं किसी वर्ग के अंदर एक स्थिरांक को कैसे परिभाषित कर सकता हूं, और इसे बनाता हूं इसलिए यह केवल तब दिखाई देता है जब इसे कक्षा के संदर्भ में कहा जाता है?
....कुछ इस तरह Foo::app()->MYCONSTANT;
(और अगर इसे MYCONSTANT
नजरअंदाज किया जाना चाहिए)
मैं किसी वर्ग के अंदर एक स्थिरांक को कैसे परिभाषित कर सकता हूं, और इसे बनाता हूं इसलिए यह केवल तब दिखाई देता है जब इसे कक्षा के संदर्भ में कहा जाता है?
....कुछ इस तरह Foo::app()->MYCONSTANT;
(और अगर इसे MYCONSTANT
नजरअंदाज किया जाना चाहिए)
जवाबों:
देखें क्लास कांस्टेंट :
class MyClass
{
const MYCONSTANT = 'constant value';
function showConstant() {
echo self::MYCONSTANT. "\n";
}
}
echo MyClass::MYCONSTANT. "\n";
$classname = "MyClass";
echo $classname::MYCONSTANT. "\n"; // As of PHP 5.3.0
$class = new MyClass();
$class->showConstant();
echo $class::MYCONSTANT."\n"; // As of PHP 5.3.0
इस मामले MYCONSTANT
में स्वयं के द्वारा गूँजने से अपरिभाषित स्थिरांक के बारे में एक सूचना जुटेगी और निरंतर नाम स्ट्रिंग में परिवर्तित हो जाएगा "MYCONSTANT"
।
संपादित करें - शायद आप जो देख रहे हैं वह इस स्थिर गुण / चर है :
class MyClass
{
private static $staticVariable = null;
public static function showStaticVariable($value = null)
{
if ((is_null(self::$staticVariable) === true) && (isset($value) === true))
{
self::$staticVariable = $value;
}
return self::$staticVariable;
}
}
MyClass::showStaticVariable(); // null
MyClass::showStaticVariable('constant value'); // "constant value"
MyClass::showStaticVariable('other constant value?'); // "constant value"
MyClass::showStaticVariable(); // "constant value"
(is_null(self::$staticVariable) === true) && (isset($value) === true)
के रूप में बहुत अधिक सफल होगा self::$staticVariable === null && $value !== null
। $value
हमेशा फ़ंक्शन के अंदर सेट किया जाएगा , इसलिए उपयोग करने की कोई आवश्यकता नहीं है isset
। और हाइपर-स्पष्ट === true
कुछ भी नहीं जोड़ता है।
यह पुराना सवाल है, लेकिन अब PHP 7.1 पर आप निरंतर दृश्यता को परिभाषित कर सकते हैं।
उदाहरण
<?php
class Foo {
// As of PHP 7.1.0
public const BAR = 'bar';
private const BAZ = 'baz';
}
echo Foo::BAR . PHP_EOL;
echo Foo::BAZ . PHP_EOL;
?>
PHP 7.1 में उपरोक्त उदाहरण का आउटपुट:
बार घातक त्रुटि: अनकवर्ड एरर: निजी कास्ट को एक्सेस नहीं कर सकता Foo :: BAZ in…
नोट: PHP के रूप में 7.1.0 दृश्यता संशोधक वर्ग स्थिरांक के लिए अनुमति दी जाती है।
अधिक जानकारी यहाँ
class Foo {
const BAR = 'baz';
}
echo Foo::BAR;
यह वर्ग स्थिरांक बनाने का एकमात्र तरीका है । ये स्थिरांक हमेशा विश्व स्तर पर सुलभ Foo::BAR
होते हैं, लेकिन वे केवल माध्यम से सुलभ नहीं होते हैं BAR
।
जैसे सिंटैक्स प्राप्त करने के लिए Foo::baz()->BAR
, आपको उस baz()
वर्ग के फ़ंक्शन से एक ऑब्जेक्ट वापस करना होगा Foo
जिसके पास एक संपत्ति है BAR
। हालांकि यह एक स्थिर नहीं है। आपके द्वारा परिभाषित कोई भी स्थिरांक हमेशा कहीं से भी वैश्विक रूप से सुलभ होता है और इसे फ़ंक्शन कॉल परिणामों तक सीमित नहीं किया जा सकता है।
यह एक बहुत पुराना सवाल है, लेकिन शायद यह जवाब अभी भी किसी और की मदद कर सकता है।
आप एक सार्वजनिक स्थिरांक का अनुकरण कर सकते हैं जो एक अंतिम दायरे को लागू करने के लिए एक वर्ग गुंजाइश के भीतर प्रतिबंधित है जो एक पूर्व-परिभाषित मान लौटाता है, जैसे:
class Foo {
// This is a private constant
final public MYCONSTANT()
{
return 'MYCONSTANT_VALUE';
}
}
किसी विधि पर अंतिम कीवर्ड विधि के विस्तार को फिर से परिभाषित करने से रोकता है। आप अंतिम कीवर्ड को कक्षा की घोषणा के सामने रख सकते हैं, जिस स्थिति में कीवर्ड क्लास इनहेरिटेंस को रोकता है।
निम्नलिखित कोड का उपयोग करने के लिए एलेक्स को वास्तव में क्या मिल रहा था:
final class Constants {
public MYCONSTANT()
{
return 'MYCONSTANT_VALUE';
}
}
class Foo {
static public app()
{
return new Constants();
}
}
उत्सर्जित स्थिर मूल्य इस तरह सुलभ होगा:
Foo::app()->MYCONSTANT();
आप php में एक वर्ग स्थिरांक को परिभाषित कर सकते हैं। लेकिन आपकी कक्षा निरंतर किसी भी वस्तु उदाहरण से सुलभ होगी। यह php की कार्यक्षमता है। हालाँकि, php7.1 के रूप में , आप अपने वर्ग स्थिरांक को पहुँच संशोधक ( public
, private
या protected
) के साथ परिभाषित कर सकते हैं ।
चारों ओर एक कार्य आपके स्थिरांक को परिभाषित करना होगा private
या protected
फिर उन्हें एक के माध्यम से पठनीय बनाना होगा static function
। यह फ़ंक्शन स्थैतिक संदर्भ से कॉल करने पर केवल स्थिर मान लौटाता है।
आप इस मूल फ़ंक्शन को अपने मूल वर्ग में भी बना सकते हैं और इसे मूल कार्यक्षमता बनाने के लिए अन्य सभी वर्गों पर बस इस मूल वर्ग को इनहेरिट कर सकते हैं।
क्रेडिट: http://dwellupper.io/post/48/defining-class-constants-in-php