перепроверку данных делаете?Обращение изнутри класса к свойстам через геттеры позволяет более просто проводить модификации - при изменении способа хранения данных править придется только геттер.
Спасибо.Если возникает такой вопрос, то в первую очередь следует подумать, как изменить архитектуру, чтобы не надо было узнавать свойства класса напрямую.
Простой пример - если $User->id == 0 - это гость, заменить проверку $User->id на $User->isGuest()
Если я правильно понял, то надо всего лишь воспользоваться phpdoc.в таком случае не делает подсказки по классам
// 1. С помощью call можно иммитировать методы setVariableName().Я пытался пользоваться встроенными сетерами и гетерами, но мне не понравилось: во-первых Zend Studio в таком случае не делает подсказки по классам, во-вторых у менять часто есть необходимость проверять передаваемые данные (это для сетеров), потому для свойств классов которые надо менять извне я создают отдельные функции, то же самое для получения значений этих свойств.
/**
* Получение и установка свойств объекта через вызов магического метода вида:
*
* $model->(get|set)PropertyName($prop);
*
* @see __call
* @return mixed
*/
public function __call($method_name, $argument)
{
$args = preg_split('/(?<=\w)(?=[A-Z])/', $method_name);
$action = array_shift($args);
$property_name = strtolower(implode('_', $args));
if (!isset(static::$model_attributes[$property_name]))
{
throw new BadMethodCallException(
__CLASS__ . '::' . __METHOD__ . ': Вызов неизвестного метода ' . get_class($this) . '::' . $method_name
);
}
switch ($action)
{
case 'get':
return $this->$property_name;
case 'set':
$this->$property_name = $argument[0];
$has_errors = isset($this->validate_errors[$property_name]);
$explicit_method = '_' . $method_name;
// Смотрим, имеется ли в классе явно объявленный set-метод (с префиксом "_") для
// данного свойства и имеются ли ошибки валидации.
// Если метод явно объявлен, а ошибок валидации нет, то применяем метод
// для текущего состояния свойства.
// Данные методы, с префиксом '_' в модели нужны для ситуаций, когда при присвоении объекту значений
// необходимо обработать значение с помощью какой-либо логики.
// Как пример, можно посмотреть метод Krugozor_Module_User_Model_User::_setUrl
if (method_exists($this, $explicit_method) && !$has_errors)
{
$this->data[$property_name] = $this->$explicit_method($this->$property_name);
}
return $this;
}
}
http://manual.phpdoc.org/HTMLSmartyConverter/PHP/phpDocumentor/tutorial_tags.method.pkg.htmlovg выше написал, что это можно сделать применяя phpdoc, но я пока не понял как
А что делать если статусов несколько? Например:Простой пример - если $User->id == 0 - это гость, заменить проверку $User->id на $User->isGuest()
даА что делать если статусов несколько? Например:
$id == 1 //автор
$id == 2 //редактор
$id == 3 //админ
$id == 4 //программист
проверять всех как if ($User->isAdmin()), else if ($User->isAuthor()), ... ?
Имхо, код не должен знать программист там юзер или админ. Должен он лишь уметь проверить есть ли у данного юзера права на такие то действия или нет.А что делать если статусов несколько? Например:
$id == 1 //автор
$id == 2 //редактор
$id == 3 //админ
$id == 4 //программист
проверять всех как if ($User->isAdmin()), else if ($User->isAuthor()), ... ?
Какая принципиальная разница междуИмхо, код не должен знать программист там юзер или админ. Должен он лишь уметь проверить есть ли у данного юзера права на такие то действия или нет.
$user->isAdmin()
$user->isRole(USER_ADMIN)
Программа программе рознь. Опять таки, имхо, определение того, имеет право юзер на это действие или нет - это отдельная задача и реализована она должна быть отдельно(как в любом нормально спроектированном приложении). Будь это ACL там или попроще(посложнее?) - это отдельная задача и сам алгоритм должен знать об этом как можно меньше.В программе не может быть неопределнного количества неопредеделенных ролей. Этих ролей конечное множество и они прошиваются на уровне алгоритма.
Имхо, код не должен знать программист там юзер или админ. Должен он лишь уметь проверить есть ли у данного юзера права на такие то действия или нет.
В программе не может быть неопределнного количества неопредеделенных ролей. Этих ролей конечное множество и они прошиваются на уровне алгоритма.