De acuerdo con php, clase :: auto siempre apunta a la clase en sí, sino como anoté estos códigos, algo extraño sucede:¿Cómo funciona el "yo" exactamente en las clases heredadas?
class C_foo{
function foo() { return "foo() from C_foo"; }
function bar() { echo self::foo(); }
}
class C_bar extends C_foo{
function foo() { return "foo() from C_bar"; }
}
C_foo::bar();
C_bar::bar();
pensé que la salida hubiera sido:
foo() from C_foo
foo() from C_bar
Pero, de hecho:
foo() from C_foo
foo() from C_foo
significa que el auto en clase padre no hereda exactamente en el niño, funciona más como esto:
foo() {return parent::foo();}
¿Eso es una característica de PHP o es un error? ¿O es eso ser así?
De lo contrario, se produjo tal cosa como he tratado de contar una clase crear objetos a partir de sí mismo, el código es algo como esto:
class Models {
function find($exp) {
...
...
$temp_model = new self();
...
...
}
}
class Something extends Models {...}
$somethings = Something::find("...");
Tal vez alguien podría preguntar: "¿Por qué no se establece una variable con el valor de clase, y usa la variable como la función __construction? "
De esta manera:
...
...
function find($exp) {
...
...
$class_name = __class__;
$temp_model = new $class_name();
...
...
}
...
De hecho lo hice, y consiguió un resultado aún más raro:
sólo funciona cuando la clase no tiene ninguna propiedad o función, pero find()
, o un Me saltó un error al decirme que una variable muestra dónde debería existir una función.
Muchas gracias, voy a probar el patrón de fábrica :) –