Продолжаю постепенно и плавно втягиваться в ООП... и пытаться отделить php от html - может в конце и к mvc приду. Криво, конечно, пока получается и далеко не все, но прогресс есть. На предыдущий свой вопрос толком ни одного ответа не получил, попробую в новом контексте спросить.
Пока есть класс handler (коннекты и что-то вроде CRUD)
Дальше я делаю выборку из БД и FETCH_CLASS.
return $stmt->fetchAll(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE, $class); //указываю BDAY
Делаю это через пустой класс entity, который мне фильтрует все входящие поля.
class Entity {
function __set($prop, $value) {
}
}
Дальше я забиваю класс Bday.
class Bday extends Entity {
public $birthday=null;
public $surname=null;
public $age=null;
public $days=null;
// function __construct() {
// // $bday=new DateTime($this->birthday);
// // $today = new DateTime("today");
// // $age =$bday->diff($today)->y;
// // $bday->setDate(date("Y"), $bday->format("m"), $bday->format("d"));
// // // $diff =$bday->diff($today)->d;
// // $this->age=$age;
// // $this->days=$bday->diff($today)->d;
// $this->days="1";
// }
}
и вот закомментированный код не срабатывает( что не так?
приходится делать следующим образом - в обработчике...
$data=$obj->db_select($fields, $table, $diff_where, $fieldname=null, $id=null, $order, $class);
foreach ($data as $person) {
$bday=new DateTime($person->birthday);
$today = new DateTime("today");
$age =$bday->diff($today)->y;
$bday->setDate(date("Y"), $bday->format("m"), $bday->format("d"));
$diff =$bday->diff($today)->d;
$person->age=$age;
$person->days=$bday->diff($today)->d;
}
Соответственно вопрос - как мне этот foreach запихнуть в класс, чтобы уже получать готовый экземпляр..
Истина где-то рядом... но...
Much appreciated
UPD:
В общем понятно все... запись в класс при выборке SELECT * и FetchALl это дохлый номер - надо каждый раз передавать в SELECT четкие поля, но это ерунда кмк. Если нужно сделать один! запрос и уже потом разбивать его на разные объекты.. наверное я все-таки не совсем еще понимаю.
Что может быть проще? в таблице 20 полей - забираю все... но в объект person мне нужно положить только 4 определенных... 4 а не 20..
есть еще такой вариант...
в хендлере...
public $params = array('surname','id','country','status' );
return $stmt->fetchAll(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE, 'person',$this->params);
потом
class Entity {
function __construct() {
$this->_attributes = func_get_args();
}
function __set($prop, $value) {
if (in_array($prop, $this->_attributes)) {
$this->$prop = $value;
}
}
}
class Person extends Entity {
public $_attributes;
}
Но тогда в объект добавляется это свойство _attributes(
ладно...раз других решений нет - пока сделаю как работает - а то слишком уж застрял