नोट: इस quesiton लिखने के आधार पर, मुझे पहले ही पता चला है कि मैं एक नई भाषा सुविधा का उपयोग करने के बारे में अत्यधिक उत्साही था। दूर क्लीनर समाधान इसके बजाय एक रणनीति पैटर्न का उपयोग कर रहा था ... फिर भी, अगर इस समस्या के बारे में जाने का कोई उचित तरीका है तो मैं उत्सुक हूं।रन-टाइम निर्धारित कॉल करने योग्य के पैरामीटर की संख्या कैसे प्राप्त करें?
टीएल; डीआर: क्या आप सभी प्रकार के कॉल करने योग्य मैन्युअल रूप से टाइप करने के बिना PHP में जेनेरिक कॉल करने योग्य पर प्रतिबिंबित कर सकते हैं?
PHP 5.4 में हमें एक नया टाइपिंट मिला है: कॉल करने योग्य। यह बहुत मजेदार लगता है। मैंने सोचा कि मैं निम्नलिखित के माध्यम से इस का उपयोग करने के चाहते हैं:
<?php
public function setCredentialTreatment(callable $credentialTreatment) {
// Verify $credentialTreatment can be used (ie: accepts 2 params)
... magic here ...
}
?>
अब तक सोचा था की मेरी लाइन प्रतिदेय पर टाइप-जांच की एक श्रृंखला करने के लिए किया गया है, और कहा कि जो परावर्तन से निष्कर्ष निकालते * वर्ग का उपयोग करने के :
<?php
if(is_array($callable)) {
$reflector = new ReflectionMethod($callable[0], $callable[1]);
} elseif(is_string($callable)) {
$reflector = new ReflectionFunction($callable);
} elseif(is_a($callable, 'Closure') || is_callable($callable, '__invoke')) {
$objReflector = new ReflectionObject($callable);
$reflector = $objReflector->getMethod('__invoke');
}
// Array of ReflectionParameters. Yay!
$parameters = $reflector->getParameters();
// Inspect parameters. Throw invalidArgumentException if not valid.
?>
अब, मेरे लिए, यह अत्यधिक जटिल लगता है। क्या मैं यहां क्या करने की कोशिश कर रहा हूं, इसे प्राप्त करने के लिए किसी प्रकार का शॉर्टकट तरीका खो रहा हूं? किसी भी अंतर्दृष्टि का स्वागत किया जाएगा :)
मैं एक ऐसी ही समस्या में पड़ गए, और किसी भी कॉल करने योग्य के लिए एक प्रतिबिंब वस्तु प्राप्त करने के लिए एक सहायक समारोह बनाने समाप्त हो गया। इस फ़ंक्शन के लिए कोड आपके जैसा ही है। – Benjamin
मुझे पता नहीं है कि आपने इसके साथ जारी रखा है, लेकिन क्या आपने अपना खुद का कॉल करने योग्य प्रतिबिंब बनाने के लिए विचार किया है जो अंतरों को संभवतः अधिक आसान पैकेज में मदद करता है? – hakre
अंत में मैंने इस पथ को और आगे नहीं बढ़ाया है, लेकिन एक पुन: प्रयोज्य कॉलबल रिफ्लेक्शन बनाना सही दिशा में एक कदम की तरह प्रतीत होता है। कुछ बिंदु पर मैं उम्मीद करता हूं कि PHP के प्रतिबिंब मॉड्यूल को उन पंक्तियों के साथ कुछ के साथ शिप करने की उम्मीद है। – kander