PHP Unconference Europe 2015

Namespaces verwenden: Rückgriff auf globale Funktion/Konstante

(PHP 5 >= 5.3.0)

Wenn PHP innerhalb eines Namespace auf einen unqualifizierten Namen für einen Klasen-, Funktions- oder Konstantennamen trifft, so werden diese mit unterschiedlichen Prioritäten aufgelöst. Klassennamen werden immer auf den aktuellen Namespace aufgelöst. Um also auf interne Klassen oder Benutzerklassen ohne Namespace zuzugreifen, muss man diese mit ihrem vollständig qualifizierten Namen ansprechen:

Beispiel #1 Zugriff auf globale Klasse innerhalb eines Namespace

namespace A\B\C;
Exception extends \Exception {}

$a = new Exception('hi'); // $a ist ein Objekt der Klasse A\B\C\Exception
$b = new \Exception('hi'); // $b ist ein Objekt der Klasse Exception

$c = new ArrayObject// fatal error, die Klasse A\B\C\ArrayObject konnte
                      // nicht gefunden werden

Für Funktionen und Konstanten wird PHP auf globale Funktionen oder Konstanten zurückgreifen, wenn eine Funktion oder Konstante im Namespace nicht existiert.

Beispiel #2 Rückgriff auf globale Funktionen/Konstanten innerhalb eines Namespace

namespace A\B\C;

    return \
strlen($str) - 1;

E_ERROR"\n"// gibt "45" aus
echo INI_ALL"\n"// gibt "7" aus - Rückgriff auf globale INI_ALL

echo strlen('hi'), "\n"// gibt "1" aus
if (is_array('hi')) { // gibt "ist kein Array" aus
echo "ist Array\n";
} else {
"ist kein Array\n";

add a note add a note

User Contributed Notes 1 note

cory at xison dot ca
5 months ago
I want to throw it out there, I found the following easier to deal with when porting parts of some older code into a new project in regards to accessing global classes.

namespace app\somethingorother;
use \
core as core;



I know it's not exactly the same as the solutions mentioned above, but it works for what I'm trying to accomplish.
To Top