यदि प्रारंभिकरण से तत्कालता को अलग करना सख्ती से एक आवश्यकता नहीं है, तो दो अन्य संभावनाएं हैं: पहला, स्थिर कारखाना विधि।
class Test {
public function __construct($param1, $param2, $param3) {
echo $param1.$param2.$param3;
}
public static function CreateTest($param1, $param2, $param3) {
return new Test($param1, $param2, $param3);
}
}
$params = array('p1','p2','p3');
if(method_exists($ob,'__construct')) {
call_user_func_array(array($ob,'CreateTest'),$params);
}
या, आप php 5.3.0 या उच्चतर उपयोग कर रहे हैं, तो आप एक लैम्ब्डा उपयोग कर सकते हैं:
class Test {
public function __construct($param1, $param2, $param3) {
echo $param1.$param2.$param3;
}
}
$params = array('p1','p2','p3');
$func = function ($arg1, $arg2, $arg3) {
return new Test($arg1, $arg2, $arg3);
}
if(method_exists($ob,'__construct')) {
call_user_func_array($func, $params);
}
प्रारंभ विधि असफ़ द्वारा वर्णित महान अगर किसी कारण से आप एक की जरूरत है है तात्कालिक रूप से तात्कालिकता से शुरुआतीकरण को अलग करने के लिए, लेकिन यदि उपर्युक्त उपयोग के मामले का समर्थन करना एक विशेष मामला है, नियमित आवश्यकता नहीं है, तो उपयोगकर्ताओं को दो अलग-अलग चरणों में तत्काल आरंभ करने और आरंभ करने की आवश्यकता के लिए असुविधाजनक हो सकता है।
कारखाना विधि अच्छी है क्योंकि यह आपको प्रारंभिक उदाहरण प्राप्त करने के लिए कॉल करने का एक तरीका देती है। वस्तु को उसी ऑपरेशन में प्रारंभ किया जाता है और तत्काल चालू किया जाता है, हालांकि, यदि आपको दोनों को अलग करने की आवश्यकता है तो यह काम नहीं करेगा।
और आखिरकार, मैं लैम्ब्डा की अनुशंसा करता हूं यदि यह प्रारंभिक तंत्र असामान्य रूप से उपयोग किया जाता है, और आप प्रारंभिकरण या फैक्ट्री विधियों के साथ अपनी कक्षा परिभाषा को अव्यवस्थित नहीं करना चाहते हैं जिसका शायद ही कभी उपयोग किया जाएगा।
ध्यान दें कि यदि निर्माता के पैरामीटर पारित होते हैं संदर्भ, तो call_user_func_array असफल हो जाएगा !! – Sarfraz