İlk, statik fabrika yöntemi: başlatma dan örneğinin ayıran kesinlikle bir gereklilik değilse, diğer iki olasılık vardır.
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);
}
Eğer php 5.3.0 veya daha yüksek kullanarak eğer Veya, bir lambda kullanabilirsiniz:
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);
}
Herhangi bir nedenle örnekleme mantıksal ayrı başlatma için bir ihtiyaç varsa Asaf tarafından açıklanan başlatma yöntemi harika ama yukarıdaki kullanım davayı destekleyen özel bir durum değil, normal bir gereklilik ise, kullanıcıların örneğini gerektiren için sakıncalı olabilir ve iki ayrı adımda nesnesi başlatılamıyor.
Size başlatılmış bir örneğini almak için aramak için bir yöntem verir çünkü fabrika yöntemi güzel. Nesne başlatıldı ve örneği aynı operasyonda olsa da, bu yüzden ikisini ayırmak için bir ihtiyaç varsa o iş olmaz edilmektedir.
Ve son olarak, ben bu başlatma mekanizması nadiren kullanılan eğer lambda tavsiye ve başlatma veya hemen hemen hiç kullanılacaktır fabrika yöntemleri ile sınıf tanımını yığılmayı istemiyorum.