PHP-Logo
Druckansicht von http://www.php-homepage.de/manual/language.namespaces.dynamic.php

PHP-Logo
[ Main Menue ]
Homepage
Downloads
Artikel
Scripts
Forum
PHP-Manual
Links
News
Freelancer
Bücher
RuDolF
Suche
Misc
Über diese Seite
Kontakt
Wunschzettel
MyGuestbook
*
[ Suche ]
*
[ Manual ]
*

Follow on Twitter - @phphomepage

RSS Feed blogoscoop
 Namespaces verwenden: Grundlagen  Letztes Update:
18.05.2012
Namespace-Schlüsselwort und __NAMESPACE__-Konstante 

Namespaces und dynamische Sprachfeatures

(PHP 5 >= 5.3.0)

Die Implementierung von Namespaces in PHP ist stark von seinen Eigenschaften als Programmiersprache mit dynamischen Features beeinflusst. Man kann also den folgenden Code in Code mit Namespaces umformen:

Beispiel #1 Dynamischer Zugriff auf Elemente

example1.php:

<?php
class classname
{
    function 
__construct()
    {
        echo 
__METHOD__,"\n";
    }
}
function 
funcname()
{
    echo 
__FUNCTION__,"\n";
}
const 
constname "global";

$a 'classname';
$obj = new $a// gibt classname::__construct aus
$b 'funcname';
$b(); // gibt funcname aus
echo constant('constname'), "\n"// gibt global aus
?>
Um diesen Code umzuformen, muss man den vollständig qualifizierten Namen (Klassenname mit namespace-Präfix) verwenden. Beachten Sie, dass, weil es keinen Unterschied zwischen einem qualifizierten und vollständig qualifizierten Namen innerhalb eines dynamischen Klassen-, Funktions- oder Konstantennamen gibt, der führende Backslash nicht notwendigerweise angegeben werden muss.

Beispiel #2 Dynamischer Zugriff auf Elemente mit Namespace

<?php
namespace namespacename;
class 
classname
{
    function 
__construct()
    {
        echo 
__METHOD__,"\n";
    }
}
function 
funcname()
{
    echo 
__FUNCTION__,"\n";
}
const 
constname "namespaced";

include 
'example1.php';

$a 'classname';
$obj = new $a// gibt classname::__construct aus
$b 'funcname';
$b(); // gibt funcname aus
echo constant('constname'), "\n"// gibt global aus

/* Wenn man doppelte Anführungszeichen verwendet,
muss "\\namespacename\\classname" verwendet werden */
$a '\namespacename\classname';
$obj = new $a// gibt namespacename\classname::__construct aus
$a 'namespacename\classname';
$obj = new $a// gibt ebenfalls namespacename\classname::__construct aus
$b 'namespacename\funcname';
$b(); // gibt namespacename\funcname aus
$b '\namespacename\funcname';
$b(); // gibt ebenfalls namespacename\funcname aus
echo constant('\namespacename\constname'), "\n"// gibt namespaced aus
echo constant('namespacename\constname'), "\n"// gibt ebenfalls namespaced aus
?>

Bitte lesen Sie auch den Hinweis zum Escaping von Namespacenamen in Strings.

© Copyright 1999 - 2011 by Mark Kronsbein | Impressum | NutzungsbedingungenWeiterempfehlen | Seitenanfang
0.0031