Я создал функцию для автоматического назначения значений из выбора в любых соответствующих переменных, доступных в связанном классе
class FR_Object{
protected $me;
public function __construct()
{
$this->me = new ReflectionClass($this);
}
public function setFrom($data)
{
if (is_array($data) && count($data)) {
$valid = get_class_vars(get_class($this));
foreach ($valid as $var => $val) {
if (isset($data[$var])) {
$this->$var = $data[$var];
}
}
}
}
}
Родительский класс:
class FR_Event extends FR_Object_DB {
public $EventsID;
public $Subject;
public $Description;
public $UserID;
public $Username;
public $Address;
public $Longitude;
public $Latitude;
public $EventStartDate;
public $EventEndDate;
public $EventsTypeID;
public $CountryID;
public $CityID;
public $Status;
public $Lang;
public $When;
public function getLang($lang){
$sql = "SELECT e.EventsID, Subject, Description, UserID, Username, Address, Longitude, Latitude, EventStartDate, EventEndDate, EventsTypeID, CountryID, CityID, Status, Lang
FROM Events e
INNER JOIN EventsDetails d
ON e.EventsID = d.EventsID
WHERE e.EventsID = " . $this->EventsID .
" AND Lang = " . $lang;
$result = $this->selectOneRow($sql);
if ($result) {
$this->setFrom($result);
}else{
$this->Lang = null;
$this->Subject = null;
$this->Description = null;
}
}
}
дочерний класс:
class FR_Invitation extends FR_Event{
public $invites;
public function getLang($lang){
parent::getLang($lang);
$sql = "SELECT InvitationID, Email, InvitationDate, ConfirmationName, UserID
FROM Invitation i
INNER JOIN ConfirmationStatus s on i.ConfirmationStatusID = s.ConfirmationStatusID
WHERE EventsID = " . $this->EventsID .
" AND Lang = " . $this->Lang;
$this->invites = $this->select($sql);
}
}
Моя проблема в том, что функция в родительском классе вызывается в дочернем классе следующим образом:
Родитель :: getLang ($ Ланг).
parent :: getLang ($ lang) использует setFrom, но в этот момент $ больше не является родительским классом.
Это ребенок!
Кто-нибудь видит способ изменить эту функцию для обычного использования и при вызове с помощью parent :: или мне просто нужно выбросить ее в корзину и перейти на более традиционные (и более длинные) методы?