Example #1
0
        // Возвращаем null, если "виртуальное" свойство еще не определено.
        return isset($this->vars[$name]) ? $this->vars[$name] : null;
    }
    // Перехват установки значения свойства.
    public function __set($name, $value)
    {
        echo "Перехват: устанавливаем значение {$name} равным '{$value}'.<br />";
        //Перед записью значения удаляем пробелы.
        return $this->vars[$name] = trim($value);
    }
    // Перехват вызова несуществующего метода.
    public function __call($name, $args)
    {
        echo "Перехват: вызываем {$name} с аргументами: ";
        var_dump($args);
        return $args[0];
    }
}
// Иллюстрация работы класса.
$obj = new Hooker();
echo "<b>Получаем значение обычного свойства.</b><br />";
echo "Значение: {$obj->opened}<br />";
echo "<b>Вызываем обычный метод.</b><br />";
$obj->method();
echo "<b>Присваивание несуществующему свойству.</b><br />";
$obj->nonExistent = 101;
echo "<b>Получение значения несуществующего свойства.</b><br />";
echo "Значение: {$obj->nonExistent}<br />";
echo "<b>Обращение к несуществующему методу.</b><br />";
$obj->nonExistent(6);