- 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."';");
}
}
Там пишут целые фреймворки чтобы решить эту задачу.
А так, ну вот в Питоне например можно сделать так:
Но лучше так НЕ делать :)
Правильным решением было бы
function SetImage($row=array())
{
$this->propertyArray = $row;
}
То есть по сути сделать обычный сеттер.
Либо использовать делать $row объектом и передавать типизированный параметр в SetImage
Допустим, что автор пишет нечто вроде ORM'а, и ему нужно сгенерить объект с указанным набором полей. Для такой задачи мой код вменяем?
P.S. Допустим, что тип $row описан в комментарии\документации к методу, поэтому мы знаем какие там ключи и типы значений.
В принципе, конечно можно делать и так, как было, php это позволяет, но на мой взгляд это нехорошая практика создавать объекту свойства динамически. То есть я клоню к тому, что $row может содержать ключи, которые не будут соответствовать описанным свойствам.
Лично я бы не стал так делать: $this->$property = $value;
Если это ORM - лучше написать через __set().
А то, что кем-то описано "на полях" о входных данных, не является на мой взгляд достаточным аргументом, чтобы забивать на проверки в коде.