Necesito poder usar un conjunto de variables estáticas en una clase que amplíe una clase base ... desde la clase base.Herencia de clases en PHP 5.2: Anulación de variables estáticas en la clase de extensión?
Considera:
class Animal {
public static $color = 'black';
public static function get_color()
{
return self::$color;
}
}
class Dog extends Animal {
public static $color = 'brown';
}
echo Animal::get_color(); // prints 'black'
echo Dog::get_color(); // also prints 'black'
Esto funciona de maravilla en PHP 5.3.x (Dog::get_color()
imprime 'marrón'), ya que tiene fines de enlace estático. Pero mi servidor de producción ejecuta PHP 5.2.11 y entonces necesito adaptar mi script.
¿Hay alguna solución bastante bonita para resolver este problema?
¡Salud!
Christoffer
EDIT: El objetivo
Como se señala más adelante, este es un ejemplo muy simplificado de lo que estoy tratando de lograr. Si le proporciono las dos opciones que he usado para resolver mi problema (y el problema mismo), alguien podría tener una solución diferente a la que ...
He creado un modelo de base de datos que contiene funciones como "buscar" , "find_by" y "find_all" (todo estático).
En PHP 5.3 hay una función llamada get_called_class()
que actualmente utilizo para determinar el nombre de la clase llamada, y luego la utilizo para mapear con la tabla correcta de la base de datos. La clase Ex User
apuntaría al users
.
get_called_class()
no existe en PHP 5.2.x y las implementaciones de hackeo que he encontrado son muy poco confiables. Luego recurrí a esta opción de usar una variable estática en todas las clases de modelos que contienen el nombre de la clase.
Asumo '' Dog' debe extenderse Animal'? –
Tiene toda la razón :) – Christoffer
Con las explicaciones adicionales, creo que debe poner su find/find por funciones como métodos en una clase de tabla en lugar de statics en una clase de fila (que es lo que parece que está intentando – gnarf