मैं पता नहीं क्यों लेकिन मैं अपने कोड में नए ऑपरेटर का उपयोग पसंद नहीं है।
स्थिर रूप से नामित कक्षा का उदाहरण बनाने के लिए यहां एक स्थिर कार्य है।
class ClassName {
public static function init(){
return (new ReflectionClass(get_called_class()))->newInstanceArgs(func_get_args());
}
public static function initArray($array=[]){
return (new ReflectionClass(get_called_class()))->newInstanceArgs($array);
}
public function __construct($arg1, $arg2, $arg3){
///construction code
}
}
आप इसे एक नाम स्थान तुम इतनी तरह ReflectionClass से बचने के लिए की जरूरत के अंदर उपयोग कर रहे हैं: नई \ ReflectionClass ...
अब आप तर्क और यह के परिवर्तनशील साथ init() विधि कॉल कर सकते हैं इसे कन्स्ट्रक्टर को पास कर देगा और आपके लिए एक वस्तु वापस कर देगा।
सामान्य नई
echo (new ClassName('arg1', 'arg2', 'arg3'))->method1()->method2();
स्टेटिक कॉल का उपयोग कर नए
$obj = new ClassName('arg1', 'arg2', 'arg3');
echo $obj->method1()->method2();
इनलाइन तरह से उपयोग करते हुए जिस तरह से नई
echo ClassName::init('arg1', 'arg2', 'arg3')->method1()->method2();
के बजाय init का उपयोग
स्टेटिक नई
echo ClassName::initArray(['arg1', 'arg2', 'arg3'])->method1()->method2();
स्थिर तरीकों के बारे में अच्छी बात यह है के बजाय initArray का उपयोग कर कॉल है कि आप इस तरह के निर्माता तर्क मान्यता के रूप में init तरीकों में कुछ पूर्व निर्माण आपरेशन चला सकते है।
स्रोत
2014-03-27 09:39:00
प्रतिबिंब – Esailija