Maison  >  Article  >  développement back-end  >  Explication détaillée de l'utilisation de l'espace de noms PHP

Explication détaillée de l'utilisation de l'espace de noms PHP

PHPz
PHPzoriginal
2020-09-25 14:24:512723parcourir

L'espace de noms php fait référence à l'espace de noms. Comment l'utiliser : créez d'abord un exemple de fichier PHP ; puis définissez le code dans l'espace de noms "MyProject" via "namespace MyProject;".

Explication détaillée de l'utilisation de l'espace de noms PHP

Espace de noms PHP (espace de noms)

L'espace de noms PHP (espace de noms) a été ajouté dans PHP 5.3. Si vous avez appris le C# et Java, les espaces de noms sont. rien de nouveau. Cependant, cela a toujours une importance très importante en PHP.

L'espace de noms PHP peut résoudre les deux types de problèmes suivants :

Conflits de noms entre le code écrit par l'utilisateur et les classes/fonctions/constantes internes PHP ou les classes/fonctions/constantes tierces.

Créer un nom alias (ou court) pour un nom d'identifiant très long (généralement défini pour atténuer le premier type de problème), améliorant ainsi la lisibilité du code source.

Définition des espaces de noms

Par défaut, tous les noms de constantes, de classes et de fonctions sont placés dans l'espace global, tout comme avant les espaces de noms pris en charge par PHP.

Un espace de noms est déclaré à l'aide du mot-clé namespace. Si un fichier contient un espace de noms, il doit déclarer l'espace de noms avant tout autre code. Le format de syntaxe est le suivant ;

<?php  
// 定义代码在 &#39;MyProject&#39; 命名空间中  
namespace MyProject;  
  
// ... 代码 ...

Vous pouvez également définir différents codes d'espace de noms dans le même fichier, tels que :

<?php  
namespace MyProject;
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */  }
namespace AnotherProject;
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */  }
?>

Il n'est pas recommandé d'utiliser cette syntaxe pour définir plusieurs espaces de noms dans un fichier unique. Il est recommandé d’utiliser la forme de syntaxe suivante entre accolades.

<?php
namespace MyProject {
    const CONNECT_OK = 1;
    class Connection { /* ... */ }
    function connect() { /* ... */  }
}
namespace AnotherProject {
    const CONNECT_OK = 1;
    class Connection { /* ... */ }
    function connect() { /* ... */  }
}
?>

Pour combiner du code global non-espace de noms avec du code d'espace de noms, seule la syntaxe des accolades peut être utilisée. Le code global doit être placé entre accolades avec une instruction d'espace de noms sans nom, par exemple :

<?php
namespace MyProject {
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */  }
}
namespace { // 全局代码
session_start();
$a = MyProject\connect();
echo MyProject\Connection::start();
}
?>

Le seul code légal avant de déclarer un espace de noms est l'instruction de déclaration qui définit la manière dont le fichier source est codé. Tout code non PHP, y compris les espaces, ne doit pas apparaître avant une déclaration d'espace de noms.

<?php
declare(encoding=&#39;UTF-8&#39;); //定义多个命名空间和不包含在命名空间中的代码
namespace MyProject {
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */  }
}
namespace { // 全局代码
session_start();
$a = MyProject\connect();
echo MyProject\Connection::start();
}
?>

Le code suivant provoquera une erreur de syntaxe :

<html>
<?php
namespace MyProject; // 命名空间前出现了“<html>” 会致命错误 - 命名空间必须是程序脚本的第一条语句
?>

Subnamespace

Tout comme la relation entre les répertoires et les fichiers, les espaces de noms PHP vous permettent également de spécifier le nom des espaces de noms hiérarchiques. Par conséquent, les noms d'espaces de noms peuvent être définis de manière hiérarchique :

<?php
namespace MyProject\Sub\Level;  //声明分层次的单个命名空间
const CONNECT_OK = 1;
class Connection { /* ... */ }
function Connect() { /* ... */  }
?>

L'exemple ci-dessus crée la constante MyProjectSubLevelCONNECT_OK, la classe MyProjectSubLevelConnection et la fonction MyProjectSubLevelConnect.

L'espace de noms utilisant

Les noms de classe dans les espaces de noms PHP peuvent être référencés de trois manières :

Noms non qualifiés ou noms de classe sans préfixe, tels que $a =new foo() ; ou foo::staticmethod();. Si l'espace de noms actuel est currentnamespace, foo sera résolu en currentnamespacefoo. Si le code utilisant foo est global et ne contient de code dans aucun espace de noms, foo sera résolu comme foo. Avertissement : Si une fonction ou une constante dans l'espace de noms n'est pas définie, la fonction ou le nom de constante non qualifié est résolu en une fonction globale ou un nom de constante.

Nom qualifié, ou nom incluant un préfixe, tel que $a = new subnamespacefoo(); ou subnamespacefoo::staticmethod();. Si l'espace de noms actuel est currentnamespace, foo sera résolu en currentnamespacesubnamespacefoo. Si le code utilisant foo est global, code non contenu dans aucun espace de noms, foo sera résolu en subnamespacefoo.

Nom complet ou nom qui inclut un opérateur de préfixe global, par exemple, $a = new currentnamespacefoo(); ou currentnamespacefoo::staticmethod();. Dans ce cas, foo est toujours résolu en nom littéral currentnamespacefoo dans le code.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn