我听说最新的 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/