Quando si utilizza il modello pseudo namespacing di pera e Zend, è comune imbattersi in gerarchie di classe che assomigliano a questo:Cosa succede quando uno spazio dei nomi e una classe condividono un nome in PHP?
Zend/
Db.php
Db/
Expr.php
Dove DB.php contiene una classe denominata Zend_Db
e Expr.php contiene una classe denominata Zend_Db_Expr
. Tuttavia, quando si tenta di convertire il vecchio namespacing 5.2 pseudo in PHP 5.3 namespacing si sono presentati con un caso in cui uno spazio dei nomi e una quota di classe un nome. Poiché l'operatore use può importare uno spazio dei nomi o un nome di classe, ciò porta ad ambiguità.
Ecco un esempio di un app che sto lavorando sulla conversione:
App/
Core.php
Core/
Autoloader.php
Qui la directory di base e namespace sono App. Nel livello superiore dello spazio dei nomi è una classe Core
:
namespace App;
class Core { }
Nella directory di base sono diverse altre classi principali, alcuni dei quali utilizzano il principale Core
. Sotto il pattern pseudo namespacing, questo non è un problema. Ma nel modello di namespace reale crea questa situazione:
namespace App\Core;
use App\Core as Core; // What is this importing? Namespace or class?
class Autoloader {
public function __construct(Core $core) {}
}
È definito? Cosa viene importato qui?
Qual è il problema? Non pensavo che potessi importare uno spazio dei nomi. Importi sempre un corso e gli dai un alias. –
http://php.net/manual/en/language.namespaces.importing.php L'uso può importare una classe o uno spazio dei nomi. –