PHP Автоматические свойства / Перегрузка - PullRequest
0 голосов
/ 28 сентября 2010

Я пишу немного 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 голосов
/ 28 сентября 2010

Попробуйте что-то вроде этого:

<?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");
        }
    }
}
?>
0 голосов
/ 28 сентября 2010

Это не перегрузка какого-либо свойства, это просто установка свойства с помощью переменных переменных.Динамическое создание новых свойств всегда было особенностью PHP.Конечно, никто не может гарантировать, что это не будет считаться устаревшим, но то, как PHP предпочитает слабую типизацию, я бы сказал, что это маловероятно.

Альтернативой может быть сохранение значений в массиве и создание магии __get accessor для их чтения, если вы хотите увеличить инкапсуляцию и контролировать доступность.

...