2010-02-05 92 views
4

我確信我可以在PHP.net上找到這個,只要我知道要搜索什麼!如何判斷一個變量在PHP類中是公有還是私有?

基本上我試圖通過類內的所有公共變量循環。

爲了簡化問題:

<?PHP 
class Person 
{ 
    public $name = 'Fred'; 
    public $email = '[email protected]'; 
    private $password = 'sexylady'; 

    public function __construct() 
    { 
    foreach ($this as $key=>$val) 
    { 
     echo "$key is $val \n"; 
    } 
    } 
} 

$fred = new Person; 

應該只是顯示弗雷德的姓名和電子郵件....

回答

6

使用Reflection。我修改的例子來自PHP手冊,以獲得想要的東西:

class Person 
{ 
    public $name = 'Fred'; 
    public $email = '[email protected]'; 
    private $password = 'sexylady'; 

    public function __construct() 
    { 
    $reflect = new ReflectionObject($this); 
    foreach ($reflect->getProperties(ReflectionProperty::IS_PUBLIC) as $prop) 
    { 
     $propName = $prop->getName(); 
     echo $this->$propName . "\n"; 
    } 
    } 
} 
+0

酷,我以前沒有heared這一點。 +1。但是,您是否有任何關於此類與get_class_vars相比的性能的知識? – Boldewyn 2010-02-05 11:31:09

+0

爲什麼使用谷歌搜索,當答案已經在SO:http://stackoverflow.com/questions/294582/php-5-reflection-api-performance – Boldewyn 2010-02-05 11:32:15

+0

啊謝謝,沒有聽說過它 - 雖然,像博爾德溫,我'有點擔心性能問題! – watermanio 2010-02-05 11:34:25

0

http://php.net/manual/en/function.get-class-vars.php

您可以使用get_class_vars()函數:

<?php 
class Person 
{ 
    public $name = 'Fred'; 
    public $email = '[email protected]'; 
    private $password = 'sexylady'; 

    public function __construct() 
    { 
     $params = get_class_vars(__CLASS__); 
     foreach ($params AS $key=>$val) 
     { 
      echo "$key is $val \n"; 
     } 
    } 
} 
?> 
+1

感謝您的鏈接,但這種使用還透露私人瓦爾... – watermanio 2010-02-05 11:23:58

相關問題