Nasıl yapıcı yöntemi kendisine belli bir sınıfın var tespit ediyorsunuz? örneğin:
function __construct()
{
}
Ile method_exists sanırım?
function hasPublicConstructor($class) {
try {
$m = new ReflectionMethod($class, $class);
if ($m->isPublic()) {
return true;
}
}
catch (ReflectionException $e) {
}
try {
$m = new ReflectionMethod($class,'__construct');
if ($m->isPublic()) {
return true;
}
}
catch (ReflectionException $e) {
}
return false;
}
) (Method_exists kullanarak bu artıları var, ancak bu kodu düşünebilirsiniz
class g {
protected function __construct() {
}
public static function create() {
return new self;
}
}
$g = g::create();
if (method_exists($g,'__construct')) {
echo "g has constructor\n";
}
$g = new g;
Bu irade çıktı "g kurucusu vardır" ve g yeni bir örneğini oluştururken, aynı zamanda ölümcül bir hata neden. Yani yapıcı tek varlığı mutlaka bunun yeni bir örneğini oluşturmak mümkün olacak anlamına gelmez. Oluşturmak fonksiyonu elbette aynı örneğe her zaman (böylece o singleton'ununu yapma) geri dönebilirler.
Orada bir kaç yolu var, ve bu tür aradığınız tam olarak ne bağlıdır.
Bir yöntem declared o sınıf için kaldıysa method_exists() söyleyecektir. Ancak, bu yöntem, zorunlu olarak callable ... o korunabilir / özel olduğu anlamına gelmez. Singletons genellikle özel kurucular kullanın.
Bu bir sorun varsa, get_class_methods() kullanın ve "__construct" (PHP 5 tarzı) veya sınıfın adına (PHP 4 tarzı) olarak get_class_methods
ya için sonucunu kontrol edebilirsiniz yalnızca geçerli bağlamda çağrılabilir yöntemleri döndürür.