Ну что, дорогие,
вот будет лето, поедем на дачу? Я обещал заняться этим с летом и добить, но как видите сезон работышопиздец закончился немного раньше, поэтому можно приступить к возобновлению телодвижений в нужном нам направлении.
под катом маленькая заготовка, созданная
на коленке на работе в пятницу вечером.
читать дальше
abstract class Bjdclub_Object_Abstract
{
protected static $__instances;
protected static $__Db;
protected $__tableName; /*must be redeclare*/
protected $__keys;
/**
* data of this object, placed in other tables or objects
* as example: id's of childs, counts of comments, last author etc
*
* false if does not load, array if loaded
*/
protected $__extData = false;
abstract public static function factory($id);
protected static function __factory($id = 0, $className)
{
if ($id and self::$__instances[$className][$id])
{
return self::$__instances[$className][$id];
}
$object = new $className($id);
if ($id)
{
self::$__instances[$className][$id] = $object;
}
return $object;
}
protected function __construct($id) {}
public function __destruct() {}
protected function __load($id) {}
abstract protected function __loadExt();
protected function isExtLoad()
{
return is_array($this->__extData);
}
public function save() {}
protected function __addKey($name)
{
$key = new Bjdclub_Object_DbKey($name);
$this->__keys[$name] = $key;
return $key;
}
protected function __getPrimaryKey() {}
public function __get($name) {}
public function __set($name, $value) {}
public function __unset($name) {}
public function __isset($name) {}
/**
* for external data:
* not 'magcal' functions but similar functional
*/
public function __getExt($name) {}
public function __setExt($name, $value) {}
/**
* update only changed data
*/
protected function getUpdateSql() {}
protected static function getDb()
{
if (!self::$__Db)
{
self::$__Db = new Bjdclub_Db();
}
return self::$__Db;
}
/**
* clear cache of object
*/
public function clearCache() {}
/**
* return data cache key
*/
protected function getCacheKey() {}
}
class Bjdclub_Object_Example extends Bjdclub_Object_Abstract
{
protected $__tableName = 'Table';
public static function factory($id = 0)
{
return parent::__factory($id, __CLASS__);
}
protected function __construct($id) {parent::__construct($id);}
protected function __loadExt()
{
return array
(
'someDataKey' => 'someDataValue'
);
}
}
По результатам экспериментов последних проектов, данный способ реализации самый быстрый/лучший/удобный/ресурсоэкономный.
А теперь, внимание, вопрос. Если кому это действительно интересно, прошу отметиться, может буду продолжать. А то я грозился, помнится, сделать бложек этому посвященный, но лень-матушка мне родней приходится)))