मैं PHP 5.2.6 का उपयोग कर रहा हूँ। मेरे पास एक रणनीति पैटर्न है, और रणनीतियों के पास एक स्थिर विधि है। कक्षा में जो वास्तव में रणनीतियों में से एक को लागू करता है, उसे तत्काल करने के लिए रणनीति वर्ग का नाम मिलता है। हालांकि, मैं इन्स्टेन्शियशन से पहले स्थिर तरीकों में से एक कॉल करने के लिए, इस तरह चाहता था:कक्षा से वैरिएबल विधि को परिवर्तनीय नाम के रूप में कॉल नहीं कर सकता?
$strNameOfStrategyClass::staticMethod();
लेकिन यह T_PAAMAYIM_NEKUDOTAYIM
देता है।
$> cat test.php
<?
interface strategyInterface {
public function execute();
public function getLog();
public static function getFormatString();
}
class strategyA implements strategyInterface {
public function execute() {}
public function getLog() {}
public static function getFormatString() {}
}
class strategyB implements strategyInterface {
public function execute() {}
public function getLog() {}
public static function getFormatString() {}
}
class implementation {
public function __construct(strategyInterface $strategy) {
$strFormat = $strategy::getFormatString();
}
}
$objImplementation = & new implementation("strategyB") ;
$> php test.php
Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM in /var/www/test.php on line 24
$> php -v
PHP 5.2.6-1+lenny9 with Suhosin-Patch 0.9.6.2 (cli) (built: Aug 4 2010 03:25:57)
क्या यह 5.3 में काम करेगा?
के लिए कैसे करने के लिए +1 टाइपिंग समस्या के साथ सौदा –
आज मस्तिष्क के फार्ट होने के बाद: पीआई कार्यान्वयन वर्ग को तत्काल ऑब्जेक्ट पास नहीं करना चाहता, क्योंकि मैं इसे लाइन पर तुरंत चालू करना चाहता हूं, कार्यान्वयन वर्ग ने कुछ डेटा बनाया है जो स्ट्रैट ईजी जरूरत है। मुझे लगता है कि मुझे 'call_user_func_array()' वैसे भी चाहिए '- महान कोड के लिए धन्यवाद! – user151841
ध्यान दें कि यह केवल 5.3 में काम करता है। आप "$ foo :: staticMethod()" कर सकते हैं लेकिन आप "$ this-> foo = new जो भी(); $ this-> foo :: staticMethod()" नहीं कर सकते हैं। –