2012年12月25日星期二

PHP获取类中常量,属性,及方法列表的几种方法

方法一:
  1. $r = new ReflectionClass($this);  
  2. Zend_Debug::dump($r->getConstants(), "Constants");  
  3. Zend_Debug::dump($r->getProperties(), "Properties");  
  4. Zend_Debug::dump($r->getMethods(), "Methods");  


方法二:
  1. <?php
  2. class myclass {
  3.   public $val1 = 1;
  4.   protected $val2 = 2;
  5.   private $val3 = 3;
  6. }

  7. $foo = new myclass();

  8. $reflect = new ReflectionClass($foo);
  9. $pros = $reflect->getDefaultProperties();
  10. var_dump($pros);
  11. ?>
方法三:

外部只能拿到public的变量

  
  1. $my_class = new test();
  2. get_class_vars(get_class($my_class));

补充一个全部获取的方法

  
  
  1. class test {
  2.     public $val1 = 1;
  3.     protected $val2 = 2;
  4.     private $val3 = 3;

  5.     public function getVar()
  6.     {
  7.         return get_class_vars(get_class($this));
  8.     }
  9. }

  10. $my_class = new test();
  11. var_dump($my_class->getVar());

方法四:

  
  1. class test {
  2.     public $val1 = 1;
  3.     protected $val2 = 2;
  4.     private $val3 = 3;
  5. }

  6. class testChild extends test
  7. {      
  8.     public function getFeilds()
  9.     {
  10.         $tt = new test();
  11.         $class_vars = get_class_vars(get_class($tt));
  12.         var_dump($class_vars);  
  13.     }
  14. }
  15. testChild::getFeilds();

我们这边之前使用的一个框架就采用了类似的方法,结果产生了基类的private方法暴露的问题
这个不知道算不算是php的一个bug,反正在类似使用时要特别小心吧


没有评论: