No creo que pueda hacer este tipo de cosas usando ::
; pero debería funcionar si está usando el separador de espacio de nombres: \
Acabo de probar con PHP PHP 5.3.5 - y el uso de ::
en efecto, me sale un error.
El uso de \, por otro lado, funciona muy bien (vea el ejemplo a continuación).
Por ejemplo, estar en el espacio de nombres global (fuera de cualquier espacio de nombres específico) se podría definir una clase SomeClass
:
namespace {
class SomeClass
{
public function method() {
var_dump("child: " . __METHOD__);
}
}
$obj = new SomeNamespace\SomeClass();
$obj->method();
}
Y, en un espacio de nombres específico llamado SomeNamespace
en mi ejemplo , se podría definir una clase SomeClass
que extendería la clase desde el espacio de nombres global, que está accesible como \SomeClass
:
namespace SomeNamespace {
class SomeClass extends \SomeClass
{
public function method() {
var_dump("parent: " . __METHOD__);
}
}
}
Nota al margen: aquí, he utilizar el bracketed syntax, como yo estoy poniendo las dos porciones de código en el mismo archivo (véase el Ejemplo 3 en esa página del manual) - pero debería funciona igual con varios archivos.
Tenga en cuenta que con las primeras versiones alpha de PHP 5.3, el separador de espacio de nombres no \
era, pero ::
Por lo tanto, si usted está usando PHP 5.3 alpha 1 o 2 (y tal vez 3, no estoy seguro de si \
ha sido elegido antes o después de alpha 3), usando ::
podría funcionar.
(Por supuesto, no debería estar usando un alfa - especialmente teniendo en cuenta que ha habido versiones estables de PHP 5.3 desde hace dos años)
¿se ejecuta sin errores? ¿Y estás seguro de que ambas clases están en el mismo espacio de nombres? – zzzzBov
¡Buena pregunta! Nunca he visto un código como ese antes. O el empleado anterior era un genio o una persona loca. – GordonM
Soy reacio a ejecutar la clase en este momento. ¡Pero si!Hay una línea que define un espacio de nombres sobre la definición de la clase (actualicé la pregunta para reflejar esto). –