php - una - No se puede usar X como Y porque el nombre ya está en uso, aunque no es
porque se usa la x y no otras letras en algebra (3)
Estoy usando PHP 5.4, y tengo una estructura de clase PSR-0 similar a la siguiente.
A / Library / Session.php :
namespace A/Library;
class Session { ... }
My / Application / Session.php :
namespace My/Application;
class Session { ... }
Mi / Aplicación / Facebook.php :
namespace My/Application;
use A/Library/Session;
class Facebook { ... }
Cuando intento ejecutar la aplicación, aparece el siguiente error:
No se puede usar A / Library / Session como Session porque el nombre ya está en uso en My / Application / Facebook.php
Aunque no lo es, al menos no en este archivo. El archivo Facebook.php declara solo la clase de Facebook
e importa exactamente una clase de Session
, A/Library
one.
El único problema que puedo ver es que existe otra clase de Session
en el mismo espacio de nombres que la clase de Facebook
, pero como nunca se importó en el archivo Facebook.php, pensé que no importaba en absoluto.
¿Estoy equivocado (en ese caso, apunte a la documentación relevante), o es un error?
El único problema que puedo ver es que existe otra clase de sesión en el mismo espacio de nombres que la clase de Facebook, pero como nunca se importó en el archivo Facebook.php, pensé que no importaba en absoluto.
Sí, importa. Es por eso que no necesita "importar" clases desde el mismo espacio de nombres. Si tiene nombres conflictivos de diferentes espacios de nombres, necesita alias la clase.
namespace My/Application;
use A/Library/Session as ASession; // choose a proper alias name here
class Facebook { ... }
Hay un error confirmado en PHP que puede afectar el comportamiento que ves. Se supone que es un error fatal, pero con opcache habilitado, aún puede ejecutarse sin problemas.
https://bugs.php.net/bug.php?id=66773
Si todavía le preocupa, vote por el error.
No, esto no es un error. Como se menciona en Uso de espacios de nombres: Aliasing / Importing
use A / Library / Session;
es lo mismo que:
use A/Library/Session as Session;
Intenta usar algo como:
use A/Library/Session as AnotherSessionClassName;