Sơ lược về namespaces trong PHP

  • PHP and Mysql
  • 14 tháng 04 2017
  • bởi Văn Khương
  • 0 Comments

Xuất hiện từ phiên bản PHP 5.3.0, hiện được sử dụng rộng rãi trong nhiều PHP framework.

1. Khái niệm namespaces

Theo khái niệm từ php.net thì nó là cách để đóng gói những file php. Được thiết kế để giải quyết 2 vấn đề là thể hiện được tác quyền của thư viện đang sử dụng và sự đụng độ không gian tên trên những ứng dụng khi tạo ra những thành phần code tái sử dụng như các classes hay functions.

Cung cấp cách nhóm những thứ có liên quan lại như những classes, interfaces, functions, và constants và giễ ràng truy cập chúng giựa theo namespaces.

2. Định nghĩa namespaces

Được khai báo với từ khóa namespace. Mỗi file chứa 1 namespace phải được khai báo trên cùng trước các code khác trong file. Cách thực hành tốt nhất là mỗi file chứa 1 class với tên class trùng với tên file đồng thời có 1 namespace mô tả được đường dẫn tới file đó

3. Khai báo sub-namespaces

Giống như đường dẫn tới thư mục. Cách thực hành tốt nhất là nên đặt namespaces và sub-namespaces theo cấu trúc thư mục chứa nó, điều này là tuyệt vời khi kết hợp với autoloading trong PHP.

4. Định nghĩa nhiều namespaces trong cùng file

Nên sử dụng cú pháp ngoặc kép cho namespaces trong trường hợp này. Tuy nhiên cách thực hành tốt nhất là chỉ sử dụng 1 namespace cho 1 file.

5. Sử dụng namespaces căn bản

Cũng như đường dẫn tuyệt đối và tương đối trong thư mục, nhưng cách tốt nhất là sử dụng full-namespace ví dụ như $a = new \cuurrentnamespace\foo(); hoặc \currentnamespace\foo()::staticmethod() và cẩn thận khi sử dụng những namespaces có đường dẫn tương đối.

Ví dụ:

// file Class1.php

namespace Foo1\Bar1\Common;
class Class1 {
   static function staticMethod1 () {
     echo 'From Object1';
   }
}

// file Class2.php

namespace Foo1\Bar1;
include 'Class1.php';

//use \Foo1\Bar1\Common\Class1 as Foo;
//class Class2 extends Foo{}

class Class2 extends Common\Class1{}
Class2::staticMethod1();

Nói thêm:
Khi kế thừa class có cùng namespace thì không cần chỉ dẫn lại namespace của class cơ sở, nếu khác thì có thể dùng namespace liên quan hoặc full-namespace, Cũng có thể sử dụng alias cho namespace để cú pháp được gọn gàng.

Tham khảo php.net

  • Chia sẻ
comments powered by Disqus