Không gian tên là cơ chế ngôn ngữ lập trình để tổ chức các biến, chức năng và lớp học. PHP 5.3 thêm hỗ trợ cho không gian tên, mà tôi sẽ chứng minh trong ví dụ sau:
Giả sử bạn muốn kết hợp hai dự án sử dụng tên lớp cùng tài, nhưng có việc thực hiện khác nhau của mỗi:
// 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?
?>
Đối với các phiên bản của PHP nhỏ hơn 5.3, bạn sẽ phải đi qua những rắc rối của việc thay đổi tên lớp cho tất cả các trường của lớp tài được sử dụng bởi một trong những dự án để ngăn chặn một vụ va chạm đặt tên:
<?php
class ProjectOne_User {
// ...
}
$user = new ProjectOne_User; // Code in Project One has to be changed too
?>
Đối với các phiên bản của PHP lớn hơn hoặc tương đương với 5.3, bạn có thể sử dụng không gian tên khi tạo một dự án, bằng cách thêm một bản tuyên bố không gian tên:
<?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
?>
để biết thêm thông tin:
Nguồn
2009-02-27 06:10:48
được minh họa rất tốt, với nhận xét và mã. +1 –
Đồng ý. Rất tốt. Tôi chỉ muốn họ đi với một dấu phân cách khác nhau giữa không gian tên và lớp. :( –
Với toàn bộ dấu phân cách: nó sẽ hoạt động hoàn hảo nếu bạn chỉ sử dụng chuỗi trích dẫn đơn mà tôi thực hiện cho mọi chuỗi trong php ngoại trừ các dòng mới –