以编程方式定义具有所有类变量的数组

时间:2010-11-05 10:52:43

标签: php oop class

有没有办法创建一个包含类中所有公共变量的数组,而不必在PHP5中手动添加它们?

我正在寻找在类中顺序设置一组变量的最快方法

4 个答案:

答案 0 :(得分:5)

看看:

get_class_vars

通过这个,您可以获得数组中的公共变量。

答案 1 :(得分:3)

get_class_vars()显而易见 - 请参阅PHP网站上的get_class_vars文档。

修改:使用此功能设置的示例:

$foo = new Foo();
$properties = get_class_vars("Foo");
foreach ($vars as $property)
{
  $foo->{$property} = "some value";
}

你也可以使用Reflection API - 来自PHP docs

<?php
class Foo {
    public    $foo  = 1;
    protected $bar  = 2;
    private   $baz  = 3;
}

$foo = new Foo();

$reflect = new ReflectionClass($foo);
$props   = $reflect->getProperties(ReflectionProperty::IS_PUBLIC);

foreach ($props as $prop) {
    print $prop->getName() . "\n";
}

var_dump($props);

?>

...直接从上面链接的PHP文档中获取的示例,但为了您的目的而进行了调整以仅检索公共属性。您可以根据需要过滤公共,受保护等。

这将返回一个ReflectionProperty个对象数组,其中包含适当的名称和类。

修改:使用上述$props数组进行设置的示例:

$props = $reflect->getProperties(ReflectionProperty::IS_PUBLIC);
foreach ($props as $prop)
{
  $foo->{$prop->getName()} = "some value";
}

答案 2 :(得分:1)

看看PHP的Reflection API。您可以使用ReflectionClass::getProperties获取属性。

要设置属性,请执行以下操作:

$propToSet = 'somePropName';
$obj->{$propToSet} = "newValue";

答案 3 :(得分:0)

尝试get_class_vars($obj);