Вот мой класс model_users («модель», из которой он расширяется, еще ничего не имеет - все еще пытается работать над подготовкой этой модели и затем абстрагировать общие функции для использования с другими моделями), Database::query
просто возвращает mysql_fetch_assoc()
результата:
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;
}
}
Это позволяет мне сделать что-то вроде:
$u = Model_User::get_by_id(5);
if ($u->exists())
{
echo $u->name;
echo $u->id;
}
else
{
echo 'No user';
}
Я пытаюсь научиться использовать модели без orm или чего-либо подобного (я использовал их раньше, но я хочу научиться делать их простые версии).
Мне интересно, как отслеживать свойства модели абстрактным способом, я видел объект отражения php, и это может быть тем, что мне нужно. Я просто хочу иметь возможность делать такие вещи, как:
$u = new Model_User();
$u->name = 'John';
$u->email = 'john@example.com';
$u->save();
или как
$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
Я не спрашиваю, как реализовать весь метод save()
, но мне нужно знать, как думать об этом таким образом, чтобы можно было иметь класс абстрактной модели, который прост в использовании. Один из барьеров, которые мне нужно преодолеть, состоит в том, что есть два типа свойств: один тип является фактическим свойством модели (в данном случае «имя» или «электронная почта»), а другой тип связан с другими вещами, такими как как «имя таблицы» или, может быть, даже «имеет много» информации об отношениях.