获取用户在类外定义的所有变量的列表

时间:2012-09-20 18:39:10

标签: php

我有这样的事情:

class foo
{
   //code
}

$var = new foo();
$var->newVariable = 1; // create foo->newVariable
$var->otherVariable = "hello, im a variable";  //create foo->otherVariable

我可以在类foo中获取用户定义的所有变量的列表(newVariable,otherVariable等)?像这样:

class foo
{
   public function getUserDefined()
   {
      // code

   }
}

$var = new foo();
$var->newVariable = 1; // create foo->newVariable
$var->otherVariable = "hello, im a variable";  //create foo->otherVariable
var_dump($var->getUserDefined()); // returns array ("newVariable","otherVariable");

谢谢!

4 个答案:

答案 0 :(得分:2)

是的,使用get_object_vars()get_class_vars()

class A {
var $hello = 'world';
}
$a = new A();
$a->another = 'variable';
echo var_dump(get_object_vars($a));
echo '<hr />';
// Then, you can strip off default properties using get_class_vars('A');
$b = get_object_vars($a);
$c = get_class_vars('A');
foreach ($b as $key => $value) {
    if (!array_key_exists($key,$c)) echo $key . ' => ' . $value . '<br />';
}

答案 1 :(得分:0)

你的问题不明确。

$var->newVariable = 1;

上述表达式有两种可能的上下文

1)您正在访问类公共变量。

class foo
{
  public $foo;
  public function method()
  {
     //code
   }
}
 $obj_foo = new foo();
 $obj_foo->foo = 'class variable';

2)您正在使用_get _set

定义类变量运行时
class foo
{
  public $foo;
  public $array = array();
  public function method()
  {
     //code
  }
  public function __get()
  {
    //some code
  }
  public function __set()
  {
    // some code
  }


}
 $obj_foo = new foo();
 $obj_foo->bar= 'define class variable outside the class';

所以你的问题在哪个上下文中讨论?

答案 2 :(得分:0)

你的目标是什么? Imo这不是很好的练习(除非你真的知道你在做什么)。也许最好考虑创建一些像“$ parameters”这样的类属性,然后为此创建setter和getter并以这种方式使用它:

class foo {
    private $variables;

    public function addVariable($key, $value) {
        $this->variables[$key] = $value;
    }

    public function getVariable($key) {
        return $this->variables[$key];
    }

    public function hasVariable($key) {
        return isset($this->variables[$key]);
    }

    (...)
 }

$var = new foo();

$var->addVariable('newVariable', 1); 
$var->addVariable('otherVariable', "hello, im a variable"); 

然后您可以随意使用它,例如获取定义的变量:

$var->getVariable('otherVariable');

检查是否已定义某些var:

$var->hasVariable('someVariable')

答案 3 :(得分:0)