This is my user class:
<?
require_once(dirname(__FILE__).'/DB.class.php');
require_once(dirname(__FILE__).'/Model.class.php');
class Benutzer extends Model
{
private $id;
private $loginName;
private $loginPassword;
private $eMail;
private $rights;
private $mailchange;
private $name;
private $vorname;
private $matrikelnr;
private $gruppe;
/**
* @TODO PhpDoc
*/
protected function __construct($id = null)
{
if ($id !== null)
$this->load($id);
}
/**
* @TODO PhpDoc
*/
public static function factory($id = null)
{
if ($id !== null && is_integer($id)){
return new Benutzer($id);
} else {
return new Benutzer();
}
}
//getter and setter...
}
This is the abstract class that is inherited by the user class:
<?php
require_once(dirname(__FILE__).'/RowDataGateway.interface.php');
abstract class Model implements RowDataGateway
{
public function getParameters()
{
return get_object_vars($this);
}
/**
* @TODO PhpDoc
*/
public function setParameters(array $values, $override = true)
{
foreach ($values as $key => $val) {
if ($override){
if (property_exists(get_class($this), $key))
$this->$key = $val;
}
else {
if (property_exists(get_class($this), $key) && !isset($this->key))
$this->$key = $val;
}
}
}
/**
* @TODO PhpDoc
*/
public function load($id, $override = true)
{
$res = QueryBuilder::selectQuery($this);
$result = DB::getInstance()->query($res['query'], array('id' => $id));
$this->setParameters($result, $override);
return $this;
}
/**
* @TODO PhpDoc
*/
public function save()
{
if (isset($this->id)){
$res = QueryBuilder::updateQuery($this);
if (DB::getInstance()->update($res['query'], $res['params'])){
return $this;
}
}
else {
$res = QueryBuilder::insertQuery($this);
if ($id = DB::getInstance()->insert($res['query'], $res['params'])){
$this->id = $id;
return $this;
}
}
return false;
}
/**
* @TODO Implement
*/
public
function delete()
{
}
}
Everytime i call the $obj->getParameters() function i get an empty array (in the foreach):
public static function insertQuery(Model $obj)
{
//INSER INTO classname (field1,field2,field3) VALUES (val1,val2,val3)
$vars = null;
$query = 'INSERT INTO `'.strtolower(get_class($obj)).'` (';
foreach ($obj->getParameters() as $key => $val) {
if ($key !== 'id')
$query .= $key.',';
}
$query = substr($query, 0, strlen($query) - 1);
$query .= ') VALUES (';
foreach ($obj->getParameters() as $key => $val) {
if ($key !== 'id'){
$query .= ':'.$key.',';
$vars[':'.$key] = $val;
}
}
$query = substr($query, 0, strlen($query) - 1);
$query .= ')';
return array('query' => $query, 'params' => $vars);
}
I've already debugged the code and the right object is given to the function!?
Where is my mistake?
FMK
That's because the properties of the child class are not visible from the method. You have two options:
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With