php - 什么是命名空间,它是如何在 PHP 中实现的?

标签 php namespaces

我听说最新的 PHP 支持 namespace 。我知道在全局范围内定义的变量没有命名空间,那么如何在不同的命名空间中创建变量呢?

它只是一种对变量/函数进行分类的方法吗?

最佳答案

命名空间是一种用于组织变量、函数和类的编程语言机制。 PHP 5.3 添加了对命名空间的支持,我将在以下示例中对此进行演示:

假设您想合并两个使用相同类名 User 的项目,但每个项目都有不同的实现:

// Code for Project One (proj1.php)
<?php
  class User {
    protected $userId;
    public function getUserId() {
      return $this->userId;
    }
  }
  $user = new User;
  echo $user->getUserId();
?>

// Code for Project Two (proj2.php)
<?php
  class User {
    public $user_id;
  }
  $user = new User;
  echo $user->user_id;
?>

<?php
  // Combine the two projects
  require 'proj1.php';
  require 'proj2.php'; // Naming collision!
  $myUser = new User; // Which class to use?
?>

对于低于 5.3 的 PHP 版本,您将不得不经历更改其中一个项目使用的类 User 的所有实例的类名的麻烦,以防止命名冲突:

<?php
  class ProjectOne_User {
    // ...
  }
  $user = new ProjectOne_User; // Code in Project One has to be changed too
?>

对于大于或等于5.3的PHP版本,您可以在创建项目时使用命名空间,通过添加命名空间声明:

<?php
  // Code for Project One (proj1.php)
  namespace ProjectOne;
  class User {
    // ...
  }
  $user = new User;
?>

<?php
  // Combine the two projects
  require 'proj1.php';

  use ProjectOne as One; // Declare namespace to use

  require 'proj2.php' // No collision!

  $user = new \One\User; // State which version of User class to use (using fully qualified namespace)

  echo $user->user_id; // Use ProjectOne implementation
?>

更多信息:

关于php - 什么是命名空间,它是如何在 PHP 中实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/593614/

相关文章:

xslt - xsl 不呈现结果

php - YII php 框架本地主机工作但 127.0.0.1 不

php - 我可以输入,或者将用户输入到没有电子邮件值的 mysql 表中是否安全?

php - MySQL 意外关闭

c++ - 命名空间内的友元函数声明/定义

namespaces - Kohana 3.3 大写/小写转换

c++ - C++ 中的参数相关名称查找 : point from n3290 Draft

php - MYSQL order by - 遵循一种模式

PHP 向 Amazon SES 发送大量电子邮件

javascript - 使用 JSON 定义的函数时是否可以使用相对语法访问 JSON 属性?