Pregunta editada para reflejar mejor mis necesidades.Llamando a Parent Class Methods
Tome el ejemplo siguiente:
class Base
{
public $Text = null;
public function __construct()
{
$this->Text = new Base_Text();
}
}
class Base_Text extends Base
{
public $Is = null;
public function __construct()
{
$this->Is = new Base_Text_Is();
}
public function CammelCase($string)
{
return trim(str_replace(' ', '', ucwords($string)));
}
}
class Base_Text_Is extends Base_Text
{
public function CammelCase($string)
{
return ($string === $this->CammelCase($string)); // doesn't work
}
}
Como puedo fijar el método Base_Text_Is::CammelCase()
sin llamar a la clase Base_Text estáticamente (no usar parent::
o Base_Text::
)?
La única solución que se me ocurrió para este tipo de situaciones es crear una función Singleton así:
function Base()
{
static $instance = null;
if (is_null($instance) === true)
{
$instance = new Base();
}
return $instance;
}
Y cambiar el método de Base_Text_Is::CammelCase()
a esto:
return ($string === Base()->Text->CammelCase($string));
Y con el fin para evitar crear dos instancias de objetos de la clase Base, en lugar de hacer:
$base = new Base();
$base->Text->Is->CammelCase('MethodOverloading'); // true
acabo de hacer:
Base()->Text->Is->CammelCase('MethodOverloading'); // true
Es esta una buena práctica? ¿Hay alguna otra solución?
I don' Obtenga su último comentario en la respuesta de Darrell. ¿No puedes acceder a las propiedades no estáticas de 'Base_Text'? ¿Desde dónde quieres llamarlos? Creo que deberías explicar esto más. –
@Felix: trato de mantener el ejemplo lo más simple posible, hay casos en los que no puedo llamar a un método principal de forma estática porque depende de las propiedades creadas. –