Hier ist mein model_users Klasse (das "Modell" es erstreckt sich von hat noch nichts - immer noch versuchen, auf immer diese eine bereit und dann abstrahieren gemeinsame Funktionen für den Einsatz mit anderen Modellen) zu arbeiten, Database::query
kehrt einfach zurück mysql_fetch_assoc()
des Ergebnisses:
class Model_User extends Model {
private static $_table = 'users';
public function __construct($properties = array())
{
parent::__construct();
foreach ($properties as $key => $value) {
$this->{$key} = $value;
}
}
public function exists()
{
return ($this->id) ? TRUE : FALSE;
}
public static function get_by_id($id = NULL)
{
if ($id)
{
$result = Database::query(
sprintf('SELECT * FROM ' . self::$_table . ' WHERE id = %d', $id)
);
return new Model_User($result);
}
else
{
return new Model_User(array());
}
}
public function save()
{
return TRUE;
}
}
Dies ermöglicht mir, etwas zu tun wie:
$u = Model_User::get_by_id(5);
if ($u->exists())
{
echo $u->name;
echo $u->id;
}
else
{
echo 'No user';
}
Ich versuche zu lernen, wie man Modelle ohne Orm oder ähnliches benutzt (ich habe diese schon früher benutzt, aber ich möchte lernen, wie man eine einfache Version davon macht).
Ich frage mich, wie man den Überblick über Eigenschaften eines Modells in einer abstrakten Weise zu halten, ich habe gesehen, php's Reflexion Objekt und das könnte sein, was ich brauche. Ich möchte nur in der Lage sein, Dinge zu tun, wie:
$u = new Model_User();
$u->name = 'John';
$u->email = 'john@example.com';
$u->save();
oder wie
$u = Model_User::get_by_id(2);
$u->email = 'someone@example.com';
$u->save();
// Different than the prior one since it would UPDATE, not INSERT
Ich frage nicht, wie man die gesamte save()
Methode, aber ich muss wissen, wie ich das so gestalten kann, dass ich eine abstrakte Modellklasse habe, die einfach zu benutzen ist. Eine der Hürden, die ich überwinden muss, ist, dass es zwei Arten von Eigenschaften gibt, eine Art, die eine tatsächliche Eigenschaft des Modells ist (in diesem Fall "Name" oder "E-Mail") und eine andere Art, die mit anderen Dingen zu tun hat, wie "Tabellenname" oder vielleicht sogar einige "hat viele" Beziehungen Informationen.