PHP自动属性/重载

时间:2010-09-28 01:47:19

标签: php properties overloading

我正在写一些PHP。我有几个类没有声明任何属性,公共或其他。我有一个自定义的mySQL类,它从mySQL中获取对象,并为新初始化的PHP对象设置属性值,如此...

while ($row = mysql_fetch_assoc($result))
{   
    foreach($row as $key => $value)
    {
        $this->{$key} = $value;         
    }
}

这似乎工作得很好,因为我可以在任何地方调用所述属性... $this->my_auto_property等。我找不到任何PHP文档将这描述为一种重载类对象属性的方法。

这可以吗?我想确保它不是某种向后兼容性,在将来的PHP版本中会消失。

2 个答案:

答案 0 :(得分:0)

这不会重载任何属性,它只是使用变量设置属性。动态创建新属性一直是PHP的一个特性。当然,没有人可以保证它不会被弃用,但PHP支持弱打字的方式我认为这不太可能。

另一种方法是将值存储在数组中并创建一个魔术__get accessor来读取它们,如果你想增加封装和对可访问性的控制。

答案 1 :(得分:0)

尝试这样的事情:

<?php
/**
 * This class creates a dynamic shell to
 * define and set any Setter or Getter
 *
 * Example:
 *
 * $property = new DynamicProperties();
 * $property->setFax("123-123-1234"); // set[anything here first letter upper case]("value here")
 * echo $property->getFax()."\n"; // get[anything here first letter upper case]()
 */

class DynamicProperties {
    private $properties;

    public function __call($name, $args) {
        if (preg_match('!(get|set)(\w+)!', $name, $match)) {
            $prop = $match[2];
            if ($match[1] == 'get') {
                if (count($args) != 0) {
                    throw new Exception("Method '$name' expected 0 arguments, got " . count($args)."\n");
                }
                return $this->properties[$prop];
            } else {
                if (count($args) != 1) {
                    throw new Exception("Method '$name' expected 1 argument, got " . count($args)."\n");
                }
                $this->properties[$prop] = $args[0];
            }
        } else {
            throw new Exception("Unknown method $name");
        }
    }
}
?>