之前笔试见过的一个题目,get_class_vars()在php5.3后只输出可视的有定义的属性。
<?php class people{ private $name="bili"; public $food="boom"; public function setName($n){ $this->name = $n; } public function setFood($f){ $this->food = $f; } public function eat(){ echo $this->name." eat ".$this->food."<br/>"; } } class animal{ private $type="monkey"; public function setType($t){ $this->type = $t; } public function eat(){ echo "{$this->type} eat "; } } function displayClass(){ $classes=get_declared_classes(); //获取所有类 foreach($classes as $class){ echo "showing information about {$class}<br />"; echo "class properties:<br />"; $pro=get_class_vars($class); //获取类的属性 if(!count($pro)) echo "NONE<br />"; else{ foreach(array_keys($pro) as $properties){ echo "<b>{$properties}</b><br />"; } } echo "class methods:<br />"; $met=get_class_methods($class); //获取类的方法 if(!count($met)) echo "NONE<br />"; else { foreach($met as $methods){ echo "<b>{$methods}</b>()<br />"; } } echo "<hr />"; } } displayClass(); ?>
--------------------------补充线-----------------------------------
看到了一种很简单的方法,不过只能输出对象,仔细想想其实那题目好像是叫遍历对象.....
class my { public $a = 'a'; protected $b = 'b'; private $c = 'c'; private $data = array('one','two','three'); // 内部foreach遍历class function traversable() { foreach($this as $key=>$val) { echo $key."=>".$val."<br>"; } } } $m = new my(); // 外部foreach遍历class foreach($m as $key=>$val) { echo $key."=>".$val."<br>"; } echo '--------------------------<br>'; // 内部foreach遍历class $m->traversable();
前一种方法的输出:
只截取了自定义类的部分,实际上这种方法可以看到php库里的所有类。包含属性和方法
后一种方法的输出:
a=>a -------------------------- a=>a b=>b c=>c data=>Array只有属性