Que tal
Triby,
a ver:
1 - los modelos no deberian redireccionar, en todo caso lanzar una excepción o guardar el error y que el controller compruebe el estado para decidir que hacer.
2 - global state,
mala palabra, yo lo trataría de evitar, podrías refactorizar a algo así:
Código PHP:
Ver originalclass Base
{
protected $_principal;
public function __construct(Principal $p)
{
$this->_principal = $p;
}
public function error($msg)
{
$this->_principal->error($msg);
}
}
y si no queres estar pasando Principal en cada una de las clases, podes hacer un fallback a registry, claro tendrias que tener registry :), pero es algo simple de construir ,
Código PHP:
Ver originalpublic function __construct(Principal $p = null)
{
if(null === $p) {
$p = $this->_getDefaultPrincipal();
}
$this->_principal = $p;
}
protected function _getDefaultPrincipal()
{
if(!Registry::has('principal')) {
throw new ModelException(/**/);
}
return Registry::get('principal');
}
Aclaración: esto también oculta dependencias, lo ideal seria utilizar DI.
3 - no entiendo bien, queres hacer una clase base(Object) para todos, modelos, vista y controladores ?
4 - Si cada uno debería tener su clase base especifica.
Con respecto a parent, this y self:
- parent hace referencia a la clase base
- this hace referencia a la instancia actual
- self hace referencia a la clase actual
PHP lo maneja de una forma particular, pero deberías utilizar self para acceder a los miembros estáticos, en tu ejemplo yo utilizaria $this->saveCache, $this->error y parent lo utilizaría, si por ejemplo reescribiera saveCache en configModel,
Código PHP:
Ver originalclass ConfigModel extends Base
{
private $_config = array();
public function __construct()
{
// Cargo la configuracion desde la base de datos
// Si algo falla:
$this->error('No se puede cargar la configuracion.');
}
public static
function log($message) {...}
public function saveConfig($newValues)
{
// Guardo los nuevos valores de configuracion
// Guardo todo en archivo de cache
$this->saveCache('config', $this->_config);
self::log('cache saved ' . time()); }
public function saveCache($file, $contents, $save = false)
{
if(true === $save) {
parent::saveCache($file, $contents);
}
...
}
}
Saludos.