- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
class User {
protected $login;
protected $password;
protected $email;
public function __construct($login, $password, $email) {
$this->login = $login;
$this->password = $password;
$this->email = $email;
}
public function __get($name) {
$reflector = new ReflectionClass($this);
return $reflector->hasProperty($name) ? $this->{$name} : null;
}
}
1. да он вообще не нужен
2. ну если очень уж хочется, то зачем прикручивать рефлексию, когда можно записать так:
return isset($this->$name)?$this->$name:null;
2. В данном коде - да, согласен (но все равно не говнокод, просто автор немного перемудрил). Но если учесть мое замечание об исключении то с рефлексией есть возможность отличать несуществующие поля от тех, в которых NULL.
... то писать надо на C++/Java. Имхо для языков с динамической типизацией такого хотеться не должно.
пользователи будут чувствовать себя в безопасности
А вообще конечно нужно в конструктор вынести.
Или не?
Проверка в геттере нах не нужна если задать нуллы ранее, еще до конструктора. А-ля константы.
Я прав к тому, что магический __get() вообще тут не нужен. И проверка на наличие св-ва тоже не нужна. Если уж известно, что в любом случае надо вернуть хотя-бы null - присваиваем сразу нуллы всем (по умолчанию), а в конструктор приедет то, что приедет.
Но тем не менее вы его реализовали.
> И проверка на наличие св-ва тоже не нужна.
Тогда я делаю $user->foobar и ваш код вылетает с undefined offset. Я лично считаю правильнее давать null, еще правильнее - бросать пользовательское исключение.
и код не вылетит - будет нотис, который максимум покажется на экране, минимум - прожуется.