Всем привет. Вообщем, по сабжу — как сделать вот это: Код (Text): // этот код прямо в классе находится $vars = get_object_vars($this); foreach($vars AS $key=>$value){ unset($this->$key); } только подругому? Без цикла, каким-нибудь стандартным методом, котрый возьмет все переменные в классе и убьет их (именно удалит, а не обнулит).
Бгг. Честно признайся - что куришь? Зачем убивать свойства класса, если ты потом этим классом пользоваться не будешь? PHP: <?php $obj = new sampleclass(); unset($obj);
Я буду пользоваться этим классом, только при каждом вызове класса там будут каждый раз другие переменные. Дело такое — есть класс в который подается массив с ключами-значениями, например, настройки класса и т.п. Дальше, я беру этот массив и: Код (Text): foreach($array AS $key=>$value){ $this->$key = $value; } И в результате у меня в классе доступны некоторые переменные. Но! Перед тем, как эти переменные создать, мне нужно удалить старые переменные, которые есть в этом классе (а они там есть, не спрашивайте почему, долго объяснять (если коротко, то там класс по ссылке передается)).
Зачем? Что мешает просто переприсвоить им новые значения? Если нужно убить вообще ВСЕ свойства - то кто мешает создать новый класс, присвоить то что нужно и отдать его? Точно? Тогда 42
Да, некоторые переменны будут совпадать именами и они перезапишутся. Но останутся, так сказать, «лишние» переменные тоже. А они мне не нужны. Нет, этот класс только один раз создается «новым» ($config = new Config). Когда я вызываю его в других местах (уже так — $this->config =& load('Config'), то он передается по ссылке (&) со всеми своими переменными, которые в данный момент у него есть.
Хочешь тебя обрадую? Все классы и так передаются по ссылке. Посмотри как реализован паттерн Registry или на худой конец Singleton (хотя лучше 1й вариант). И храни все настройки в массиве PHP: <?php class Config { protected $_opt = array(); public function setValues(array $data) { $this->_opt = $data; } public function setValue($key, $value) { if (array_key_exists($key, $this->_opt) { $this->_opt[$key] = $value; } else { throw new Exception('Key ' . $key . ' not allowed'); } } }
Ой нет, как раз таки от хранения переменных в массиве я и хотел избавиться и уже избавился. Если бы я хранил в массиве переменные, я бы и сам догадался сделать unset($this->_opt); ))) Я же хочу, чтобы переменные были переменными и запись выглядела, например, так: Код (Text): $this->config =& load('Config'); echo $this->config->language; а не так: Код (Text): $this->config =& load('Config'); echo $this->config->_opt['language'];
Simpliest а как же магический метод в классе: PHP: <?php public function __get($key){ if (array_key_exists($key, $this->_opt){ return $this->_opt[$key]; } else { throw new Exception("Key {$key} not established"); } } artuska, И будет тебе доступ как var_dump($config->login);
Бгг. PHP: <?php public function __get($key) { if(array_key_exists($key, $this->_opt)) { return $this->_opt[$key]; } } Вызывать как Код (Text): echo $obj->keyName
имхо, сделать абстрактный класс, в котором хранить общие методы, и плождить ему сколько угодно потомков, у которых будет свой набор атрибутов и общие методы от предка. но, без фанатизма с количеством потомков
DarkElf У вас видимо устаревшие данные о доктрине, вот до чего они доросли: PHP: <?php /** @Entity */ class MyPersistentClass { /** @Column(type="integer") */ private $id; /** @Column(type="string") */ private $name; //... } http://www.doctrine-project.org/documen ... ty-mapping
После загрузки идет сохранение в Doctrine\ORM\Mapping\ClassMetadata, откуда впоследствии и берется схема
Вот, так и сделал, спасибо тебе, topas. «Магические» методы работают — мдя, никогда ими не пользовался, вот и не в курсе ( Тему можно закрывать. (А про Доктрину это вы не в кассу)
artuska [шёпотом] Не забывайте тех, кто отписывался в форуме чаще чем вы сами [/шёпотом] и ещё, советую не увлекаться магическими методами. Поменьше магии и побольше паттернов в архитектуре.