[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Динамическое объявление свойств класса.
iVasya
Проблема: создаю класс, имена свойств класса зарнее не известны - получаю их динамически. Т.е хочу как-то так:
$someVar = 'name';

class MyClass {
public {$someVar} = 'hello'; // свойствоо с названием name
}

Пхп на такую конструкцию ругается.

Я знаю, что так можно делать внутри какого-нибудь метода:
class MyClass {
public function __construct() {
$this->{$someVar} = 'hello';
}
}


Но мне нужен именно первый вариант! Что бы свойства объявлялись НЕ в методе!

Как быть и возможно ли это вообще (может в 5.5 появилось то, что мне нужно?)
TMake
никак ибо ты неверно планируешь решение
Тебе скорее всего нужно одно свойство (с любым именем) и методы __set() и __get()
iVasya
Ок, объясню ситуацию поэтапно на упрощенном примере, ибо может это действительно плохая затея.
Есть модель (в виде объекта класа MyModel), описывающая хтмл форму. Соответсвенно, свойства этой модели - это значения атрибутов name в верстке формы, а значения этих свойств - value из верстки:
1)
<form>
<
input type="text" name="login">
<
input type="text" name="age">
</
form>


2) Описываю эту модель на сервере:
class MyModel {
public $login;
public $age;
}


3) И тут меня посещает мысль, хм...а ведь мне еще во многих местах пригодтся эти 2 слова: login и age (и для формирования хтмл-формы в пхп, и при описании моделей, и при валидации, и для дальнейшей передачи отвалидированной формы какому-то сервису, и еще где-то).
И прихожу к выводу, что очень правильно будет ключи модели, т.е. login и age, вынести в какие-то переменные, т.к. если мне понадобиться в дальнейшем заменить login на coolLogin - то я сделаю это всего в одном месте, вместо того, что бы поменять это в отрисовке формы, в описании модели и там и сям. Что я имею теперь:

$name = 'login';
$age = 'age';

<
form>
<
input type="text" name="<?=$name?>">
<
input type="text" name="<?=$age?>">
</
form>

// А вот с описанием модели теперь проблема, как вы поняли:
class MyModel {
public {$login}; // не работает так, ошибка
public {$age}; // ошибка
}


Описывать таким образом свойства в конструкторе (через $this->{$name} = '' или через геттер - не вариант!)
Может это всё вообще бадыльная затея, и правильно будет в сотни местах вручную прописывать login и age и если в какой-то момент их нужно будет поменять на другие название (например, внешний сервис, которому нужно передать эту форму теперь ожидает другие имена переменных в пост-массиве) - руками в эти ста местах менять названия на новые.
?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.