- 1
- 2
- 3
- 4
- 5
- 6
- 7
function SetImage($row=array())
{
foreach($row as $property=>$value)
{
eval("\$this->".$property." = '".$value."';");
}
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+57
function SetImage($row=array())
{
foreach($row as $property=>$value)
{
eval("\$this->".$property." = '".$value."';");
}
}
bormand 30.08.2012 13:52 # +7
bormand 30.08.2012 14:02 # 0
3.14159265 30.08.2012 14:25 # 0
Там пишут целые фреймворки чтобы решить эту задачу.
myaut 30.08.2012 15:09 # +3
А так, ну вот в Питоне например можно сделать так:
Но лучше так НЕ делать :)
Vasiliy 31.08.2012 10:35 # +1
roman-kashitsyn 31.08.2012 11:33 # +1
guest 14.09.2012 12:18 # +1
Правильным решением было бы
function SetImage($row=array())
{
$this->propertyArray = $row;
}
То есть по сути сделать обычный сеттер.
Либо использовать делать $row объектом и передавать типизированный параметр в SetImage
bormand 14.09.2012 13:06 # 0
Допустим, что автор пишет нечто вроде ORM'а, и ему нужно сгенерить объект с указанным набором полей. Для такой задачи мой код вменяем?
P.S. Допустим, что тип $row описан в комментарии\документации к методу, поэтому мы знаем какие там ключи и типы значений.
kryoz 21.09.2012 13:29 # 0
В принципе, конечно можно делать и так, как было, php это позволяет, но на мой взгляд это нехорошая практика создавать объекту свойства динамически. То есть я клоню к тому, что $row может содержать ключи, которые не будут соответствовать описанным свойствам.
Лично я бы не стал так делать: $this->$property = $value;
Если это ORM - лучше написать через __set().
А то, что кем-то описано "на полях" о входных данных, не является на мой взгляд достаточным аргументом, чтобы забивать на проверки в коде.