PHP में गतिशील स्थिर नाम




constants indirection (2)

मैं गतिशील रूप से एक स्थिर नाम बनाने की कोशिश कर रहा हूं और फिर मूल्य प्राप्त कर सकता हूं।

define( CONSTANT_1 , "Some value" ) ;

// try to use it dynamically ...
$constant_number = 1 ;
$constant_name = ("CONSTANT_" . $constant_number) ;

// try to assign the constant value to a variable...
$constant_value = $constant_name;

लेकिन मुझे लगता है कि $ निरंतर मूल्य में अभी भी NAME की स्थिरांक है, और VALUE नहीं है।

मैंने अप्रत्यक्ष स्तर के दूसरे स्तर की कोशिश की $$constant_name लेकिन यह एक चर नहीं एक निरंतर बना देगा।

क्या कोई इस पर कुछ प्रकाश डाल सकता है?


अपनी कक्षा में गतिशील स्थिर नामों का उपयोग करने के लिए आप प्रतिबिंब सुविधा (php5 के बाद से) का उपयोग कर सकते हैं:

$thisClass = new ReflectionClass(__CLASS__);
$thisClass->getConstant($constName);

उदाहरण के लिए: यदि आप वर्ग में केवल विशिष्ट (SORT_ *) स्थिरांक को फ़िल्टर करना चाहते हैं

class MyClass 
{
    const SORT_RELEVANCE = 1;
    const SORT_STARTDATE = 2;

    const DISTANCE_DEFAULT = 20;

    public static function getAvailableSortDirections()
    {
        $thisClass = new ReflectionClass(__CLASS__);
        $classConstants = array_keys($thisClass->getConstants());

        $sortDirections = [];
        foreach ($classConstants as $constName) {
            if (0 === strpos($constName, 'SORT_')) {
                $sortDirections[] =  $thisClass->getConstant($constName);
            }
        }

        return $sortDirections;
    }
}

var_dump(MyClass::getAvailableSortDirections());

परिणाम:

array (size=2)
  0 => int 1
  1 => int 2

और यह प्रदर्शित करने के लिए कि यह वर्ग स्थिरांक के साथ भी काम करता है:

class Joshua {
    const SAY_HELLO = "Hello, World";
}

$command = "HELLO";
echo constant("Joshua::SAY_$command");




indirection