Yansıma ya da örnekleme bir sınıf var ve bir arabirimi uygulayan olmadığını belirlemek için kullanılmalıdır?

4 Cevap php

Ben bir sınıf var ve bir arabirimi uygulayan olup olmadığını belirlemek istiyorlar. Aşağıda hem de çalışması gerekir. Hangi neden tercih edilmeli?

Sınıf varsa / / kontrol örnekleriz ve Annotation uygulayan olmadığını öğrenmek

  if(class_exists($classname)){
   $tmp=new $classname;
   if($obj instanceof Annotation) {//do something}
  }

/ / Sınıf varsa, kontrol bunun bir yansıması yapmak ve Annotation uygulayan olmadığını öğrenmek

  if(class_exists($classname)){
   $r=new  new ReflectionClass($classname);
   if($r->implementsInterface('Annotation)) {//do something}
  }

4 Cevap

Bu işlevleri göz atın

  • class_implements verilen sınıf tarafından uygulanan arabirimleri dönmek
  • class_parents belirli bir sınıfın ana sınıfları dönmek
  • is_a denetler nesne bu sınıfın veya ebeveynlerinden biri olarak bu sınıf varsa

Ben bunun bir sınıf ya da örneğinin iç gözlem için Reflection sınıf üzerinden bu tercih ederim. The Reflection API reverse-engineering classes içindir.

interface_exists ya da property_exists, etc gibi diğer userful yerli fonksiyonu bir dizi bulunmaktadır.

Yansıma güvenli & olduğunu Eğer doğrulamak iyi yolu olmadan nesne örneğini. Bu Annotation uygulamak değil ve nesnenin oluşturulması fazla kaynak yükü olup olmadığını nesneyi gerekmez ama eğer nesne oluşturma tavsiye edilmez. Bu senaryoda yansıma tekniğini kullanarak mantıklı.

You o zaman Annontation veya uygulayıp uygulamadığını object kullanmaya devam iseniz, nesneyi oluşturmak ve ek açıklama arabirimini uygulayıp uygulamadığını bakabilirsiniz. Hiç iyi bir yol yoktur, bunun yerine en iyi uygulamaların düşünebilirsiniz.

Kullanımı ReflectionClass IMO daha zarif bir yoludur. Artı sadece denetimi yapmak için sınıf örneğini zorunda değilsiniz.

Bu bir olağan yoludur. Ben de bu yöntemi kullanın

if(class_exists($classname)){
   $tmp=new $classname;
   if($obj instanceof Annotation) {//do something}
  }