Global space và import

Hằng số NAMESPACE

Hằng số __NAMESPACE__ là string có nội dung là namespace hiện tại. Trong trường hợp đoạn code không thuộc namepsace nào thì sẽ là string rỗng.

Ví dụ sau đây sẽ tạo một hàm tạo object từ tên class.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
<?php
namespace MyProject;

class MyClass() {};

function get($classname) {
  $a = __NAMESPACE__ . '\\' . $classname;
  return new $a;
}
$myclass = get('MyClass');

Global space

Global space là nơi lưu trữ các hàm PHP đã định nghĩa từ trước. Khi tên hàm hay class (cả interface, hằng số) ở trong namespace trùng với global space thì PHP sẽ lấy trong namespace. Muốn sử dụng hàm, class ở global space thì có thể sử dụng ký tự \ ở trước tên hàm hay class.

Ký tự \ ở trước tên hàm hay class (interface) cho biết nó lấy ở global space.

Khi không sử dụng ký tự \ và trường hợp hàm không có trong namespace thì PHP sẽ lấy ở global space. Với trường hợp class, interface thì PHP luôn luôn lấy ở trong namespace. Nếu class không có ở namespace thì sẽ báo lỗi.

1
2
3
4
5
6
7
8
9
<?php
namespace A\B\C;
class Exception extends \Exception {}

$a = new Exception('hi'); // $a là một đối tượng của A\B\C\Exception
$b = new \Exception('hi'); // $b là một đối tượng của class Exception (global space)

$c = new \ArrayObject; // ok, lấy ở global space
$d = new ArrayObject; // Lỗi, class A\B\C\ArrayObject không tìm thấy

Importing và Alias

Để viết namespace ngắn gọn hơn, thay vì dùng My\Full\Classname ta muốn dùng ClassName thì PHP đã có tính năng importing. Trong trường hợp muốn đặt tên khác, chúng ta hãy sử dụng alias.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
<?php
namespace foo;

use My\Full\Classname;
use My\Full\Classname2 as Another;

// importing a global class
use ArrayObject;

$a = Classname();
$b = Another();
$c = new ArrayObject(array(1));

Từ phiên bản PHP 5.6 còn có thể sử dụng import hàm và hằng số.

1
2
3
4
5
6
7
8
<?php
namespace foo;

use function My\Full\functionName;
use const My\Full\CONSTANT;

functionName(); // gọi hàm My\Full\functionName()
echo CONSTANT; // in hằng My\Full\CONSTANT