0

我有这样的事情:

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

4 回答 4

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 />';
}
于 2012-09-20T18:42:58.433 回答
0

你的问题虽然不清楚。

$var->newVariable = 1;

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

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

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

或者

2)您正在使用_ get和定义类变量运行时_放

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';

那么您的问题是在哪种情况下讨论的?

于 2012-09-20T18:42:46.377 回答
0

你的目标是什么?海事组织这不是很好的做法(除非你真的知道你在做什么)。也许考虑创建一些像“$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')
于 2012-09-20T18:50:17.410 回答
0

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

于 2012-09-20T18:55:53.780 回答