захотел написать свой ActiveRecord в контексте определенной задачи. Возникли вопросы
Я хотел сделать класс abstract Model, который имеет методы find, remove, от которого будут наследоваться остальные классы. Например, у меня в бд есть таблица users, я делаю class User extends Model, который по дефолту будет иметь find, remove. Если мы создаем new User, то по сути это должна быть новая запись в таблицу users (insert), верно? Т.е. создавать экземпляр user и вызывать find это неправильно, потому что новый экземляр класса подразумевает новую запись в таблице. Я хочу сделать так:
User::find(id), User::remove(id) для получения и удаления, и
$user = new User(); $user->setId(40); $user->setName("Vasya"); $user->save();
Я в конструкторе модели юзаю вызов pdo, вот так:
abstract class Model
{
/**
* @var PDO
*/
protected $pdo;
/**
* @var string
*/
protected $tableName;
public function __construct(array $config)
{
$this->pdo = new \PDO("mysql:host=localhost;dbname=" . $config['db_name'], $config['db_username'], $config['db_password'], array(PDO::MYSQL_ATTR_INIT_COMMAND=>'SET NAMES utf8'));
}
Создание static метода find будет несуразным, по скольку будем обращаться к не статическому pdo.
Как обойти и на сколько я прав? Может есть хороший пример где то как это должно быть? Т.к. я не нашел