2016-03-21 18 views
3

Özel özellikler içeren sınıflarda, property_exists() işlevi true değerini döndürür (php> 5.3). İşlevler ile, yalnızca yöntemin varlığını değil, aynı zamanda mevcut olduğunu (method_exists() 'in bir alternatifi olarak) onaylayan bir is_callable yöntemi de vardır. Bu özelliğe erişilebiliyorsa, bu işlevin eşdeğer bir karşılığı var mı?Bir özelliğin php'de erişilebilir olup olmadığını nasıl doğrularsınız?

<?php 

class testClass { 

    private $locked; 

    public $unlocked; 

    private function hiddenFunction(){ 
     return "hidden"; 
    } 

    public function visibleFunction(){ 
     return "visible"; 
    } 

} 

$object = new testClass(); 

var_dump(property_exists($object, "unlocked")); // returns true 
var_dump(property_exists($object, "locked")); // returns true > php 5.3 

var_dump(method_exists($object, "hiddenFunction")); // returns true but can't be called 
var_dump(method_exists($object, "visibleFunction")); // returns true 

var_dump(is_callable(array($object, "hiddenFunction"))); // returns false 
var_dump(is_callable(array($object, "visibleFunction"))); // returns true 

?> 

cevap

0

Sen-ters mühendisi sınıfları, arayüzler, fonksiyonlar, yöntemler ve uzantılarsağlayacak Reflection sınıf taht kullanabilirsiniz.

Örneğin, bir sınıfın tüm kamu özelliklerini almak için, size aşağıdaki gibi yapabilirsiniz:

$reflectionObject = new ReflectionObject($object); 
$testClassProperties = $reflectionObject->getProperties(ReflectionProperty::IS_PUBLIC); 
print_r ($testClassProperties); 

ÇIKIŞ

Array 
(
    [0] => ReflectionProperty Object 
     (
      [name] => unlocked 
      [class] => testClass 
     ) 

) 

bir sınıfın tüm genel yöntemleri almak için şunları yapabilirsiniz aşağıdaki gibi yapın:

$reflectionObject = new ReflectionObject($object); 
$testClassProperties = $reflectionObject->getMethods(ReflectionProperty::IS_PUBLIC); 
print_r ($testClassProperties); 

ÇIKIŞI Bunun yerine get_class_vars fonksiyonunu kullanabilirsiniz yansıma kullanmanın

Array 
(
    [0] => ReflectionMethod Object 
     (
      [name] => visibleFunction 
      [class] => testClass 
     ) 

) 
+0

Teşekkürler. Kontrol fonksiyonlarının basit php fonksiyonları ile yapılabilmesi gariptir, ancak özellik yansıma sınıfını kullanmalıdır! – Joe

0

. Bu işlev yalnızca erişilebilir özellikleri döndürür.

$vars = get_class_vars(get_class($object)); 

Onun hızlı ve ben yansımadan daha verimli olduğundan eminim. Belki de bilmeniz gereken bir şey, bu işlevin dinamik olarak oluşturulmuş özellikler ile ilgilenmeyeceğidir. Tekrardan. Umarım kimse bunu yapmaz. Ayrıca, php 5.6'da bu işlev, üst sınıfların genel özelliklerini de döndürür. Eski sürümlerde de aynı şekilde işe yarayabilir. Ama bu doğrulamak için başka biri için bu doğrulamak

İlgili konular