Rechercher une fonction PHP

Espaces de noms et langage dynamique

(PHP 5 >= 5.3.0, PHP 7)

L'implémentation des espaces de noms de PHP est influencée par sa nature dynamique de langage de programmation. Par conséquent, pour convertir du code tel que le code de l'exemple suivant, en un espace de noms :

Exemple #1 Accès dynamique aux éléments

example1.php:

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

$a 'classname';
$obj = new $a// affiche classname::__construct
$b 'funcname';
$b(); // affiche funcname
echo constant('constname'), "\n"// affiche global
?>
Il faut utiliser un nom absolu (le nom de la classe, avec son préfixe d'espace de noms). Notez qu'il n'y a pas de différence entre un nom absolu et un nom qualifié dans un nom de classe, de fonction ou de constante dynamique, ce qui fait que l'anti-slash initial n'est pas nécessaire.

Exemple #2 Accès dynamique à des espaces de noms

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

/* Note que si vous utilisez des guillemets doubles, "\\nomdelespacedenoms\\classname" doit être utilisé */
$a '\nomdelespacedenoms\classname';
$obj = new $a// affiche nomdelespacedenoms\classname::__construct
$a 'nomdelespacedenoms\classname';
$obj = new $a// affiche aussi nomdelespacedenoms\classname::__construct
$b 'nomdelespacedenoms\funcname';
$b(); // affiche nomdelespacedenoms\funcname
$b '\nomdelespacedenoms\funcname';
$b(); // affiche aussi nomdelespacedenoms\funcname
echo constant('\nomdelespacedenoms\constname'), "\n"// affiche namespaced
echo constant('nomdelespacedenoms\constname'), "\n"// affiche aussi namespaced
?>

Il est recommandé de lire la note au sujet de la protection des espaces de noms dans les chaînes.

Rechercher une fonction PHP

Document créé le 30/01/2003, dernière modification le 26/10/2018
Source du document imprimé : https://www.gaudry.be/php-rf-language.namespaces.dynamic.html

L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.

Références

  1. Consulter le document html Langue du document :fr Manuel PHP : http://php.net

Ces références et liens indiquent des documents consultés lors de la rédaction de cette page, ou qui peuvent apporter un complément d'information, mais les auteurs de ces sources ne peuvent être tenus responsables du contenu de cette page.
L'auteur de ce site est seul responsable de la manière dont sont présentés ici les différents concepts, et des libertés qui sont prises avec les ouvrages de référence. N'oubliez pas que vous devez croiser les informations de sources multiples afin de diminuer les risques d'erreurs.

Table des matières Haut