- 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;
}
}
scriptin 10.03.2013 22:55 # +1
Lure Of Chaos 10.03.2013 23:32 # 0
1. да он вообще не нужен
2. ну если очень уж хочется, то зачем прикручивать рефлексию, когда можно записать так:
return isset($this->$name)?$this->$name:null;
scriptin 10.03.2013 23:38 # +2
2. В данном коде - да, согласен (но все равно не говнокод, просто автор немного перемудрил). Но если учесть мое замечание об исключении то с рефлексией есть возможность отличать несуществующие поля от тех, в которых NULL.
bormand 11.03.2013 07:32 # 0
... то писать надо на C++/Java. Имхо для языков с динамической типизацией такого хотеться не должно.
scriptin 11.03.2013 18:37 # +2
3Doomer 11.03.2013 06:47 # 0
govnomonad 11.03.2013 07:19 # +5
пользователи будут чувствовать себя в безопасности
someone 11.03.2013 13:45 # 0
Vindicar 12.03.2013 08:53 # −1
someone 12.03.2013 09:07 # 0
bot 11.03.2013 21:52 # +3
scriptin 11.03.2013 22:47 # +1
А вообще конечно нужно в конструктор вынести.
bot 11.03.2013 23:34 # 0
Или не?
wvxvw 11.03.2013 23:54 # 0
bormand 12.03.2013 05:49 # +1
deep 15.03.2013 05:53 # −1
Проверка в геттере нах не нужна если задать нуллы ранее, еще до конструктора. А-ля константы.
Vizer 15.03.2013 09:10 # 0
guest 15.03.2013 09:16 # −1
deep 16.03.2013 10:52 # 0
Я прав к тому, что магический __get() вообще тут не нужен. И проверка на наличие св-ва тоже не нужна. Если уж известно, что в любом случае надо вернуть хотя-бы null - присваиваем сразу нуллы всем (по умолчанию), а в конструктор приедет то, что приедет.
Vizer 18.03.2013 11:30 # 0
Но тем не менее вы его реализовали.
> И проверка на наличие св-ва тоже не нужна.
Тогда я делаю $user->foobar и ваш код вылетает с undefined offset. Я лично считаю правильнее давать null, еще правильнее - бросать пользовательское исключение.
Lure Of Chaos 19.03.2013 02:42 # 0
и код не вылетит - будет нотис, который максимум покажется на экране, минимум - прожуется.
wvxvw 12.03.2013 00:00 # +1
guest 19.03.2013 03:59 # 0
guest 28.05.2013 00:26 # 0