Hướng dẫn does php support namespace? - php có hỗ trợ không gian tên không?

Từ PHP 5.3 namespaces được giới thiệu để đóng gói các item và làm cho script dễ quản lý hơn.

Nội dung chính ShowShow

  • Khai báo namespace
  •  Nạp namespace bằng từ khóa use
  • Định danh cho namespace
  • 1, Namespace là  gì?
  • 2, Khai báo namespace.
  • 3, Gọi namespace.
  • Nạp namespace bằng use
  • 4, Định danh cho namespace.
  • 5, Nhiều namespace trong một file.
  • 6, Lời Kết.

Khi một trang web trở nên lớn hơn, việc giữ tất cả các file class trong cùng một thư mục sẽ khó hơn. Ngoài ra, chúng ta phải sử dụng tên rất dài cho các file và class, Đó là một trở ngại trong quản lý mã nguồn. Namespaces được giới thiệu để ngăn chặn vấn đề này. Chúng ta hãy xem nó hoạt động như thế nào!

 Giả sử chúng ta có cấu trúc file như sau:

class
	animals
		Dog.php
		Cat.php
		Goat.php
	birds
		Owl.php
		Peacock.php
	pets
		Dog.php
		Cat.php
	MainClass1.php
	MainClass2.php
	MainClass3.php

 Trong cấu trúc thư mục trên bạn thấy có file Dog.php và Cat.php được lưu trong các thư mục khác nhau, chúng là các class khác nhau hoàn toàn nhưng lại trùng tên,vậy làm sao để PHP biết bạn đang muốn gọi class nào khi thực hiện autoload, do đó chúng ta sử dụng thêm namespace để PHP có thể hiểu 2 file Dog và Cat trên là 2 file khác nhau hoàn toàn.

 Đoạn code trên hoạt động như thế nào?

Đầu tiên chúng ta định nghĩa autoload để load các file trong thư mục class khi được gọi đến. Trong hàm này chúng ta định nghĩa hàm str_replace thay thế tất cả dấu \ bằng DIRECTORY_SEPARATOR - 1 hằng số được định nghĩa trước đại diện cho dấu ngăn cách thư mục trong PHP ("\" cho Windows và "/" cho Linux). Tiếp theo nó sẽ include_once để nạp các class khi được gọi đến. $_SERVER['DOCUMENT_ROOT'] chính là đường dẫn đến thư mục gốc của ứng dụng web.

Do class dog và cat tồn tại 2 file giống nhau nên khi gọi bạn cần phải truyền namespace để PHP phân biệt chúng.

Khai báo namespace

 Nạp namespace bằng từ khóa use

Định danh cho namespaceName là tên của namespace Khi khai báo namespace thì chúng ta phải đặt nó ở phía trên cùng của file. Khi đã thiết lập namespace chúng ta cần sử dụng namespace để lấy ra class như ví dụ trên: new Animal\Dog()

name;
    }
}

 Nạp namespace bằng từ khóa use

Định danh cho namespace

getName();
//kết quả: Tom

1, Namespace là  gì?

Định danh cho namespace

1, Namespace là  gì?

use name_space_name as alias; 
getName();

2, Khai báo namespace.PHP 5.3 trở đi thì PHP có hỗ trợ cho chúng ta chức năng mới là 

name;
    }
}
0...

1, Namespace là  gì?

2, Khai báo namespace.

3, Gọi namespace.

Nạp namespace bằng usenhư chúng ta có 2 file mỗi file đều chứa một class và 2 class này lại có một điểm chung là trùng tên. Giờ đây khi bạn nhúng cả 2 file này vào và gọi class thì ngay lập tức chương trình sẽ báo lỗi. Để khắc phục điều đó thì chúng ta cần khai báo namespace cho hai class đó (đọc tiếp để xem cách khai báo).

2, Khai báo namespace.

3, Gọi namespace.namespace trong PHP chú ta sử dụng cú pháp sau:

namespace Name;

Nạp namespace bằng useName là tên của namespace.

4, Định danh cho namespace.khi khai báo namespace thì chúng ta phải đặt nó ở phía trên cùng của file. Hơn nữa nếu như bạn muốn đặt tên namespace đúng chuẩn thì hãy tham khảo series PHP standards.

VD:

class Package
{
    public function sayHello()
    {
        echo 'Hello World!';
    }
}

5, Nhiều namespace trong một file.

6, Lời Kết.: Tạo một class HomeController trong thư mục app\controllers và đặt tên namespace như sau:

namespace App\Controllers;

class HomeController
{
    //code
}

3, Gọi namespace.

Nạp namespace bằng use

new tenNamespace\tenClass();

VD::

4, Định danh cho namespace.ConNguoi.php có nội dung như sau:

0

5, Nhiều namespace trong một file.index.php cùng cấp với file ConNguoi.php và lúc này chúng ta sẽ phải gọi class ConNguoi như sau:

1

Nạp namespace bằng use

4, Định danh cho namespace.

2

Chú ý: Khai báo nạp namespace cũng phải được đặt trên đầu của một file, nếu như trong một file có sử dụng namespace và use thì use sẽ được đặt dưới namespace.: Khai báo nạp namespace cũng phải được đặt trên đầu của một file, nếu như trong một file có sử dụng namespace và use thì use sẽ được đặt dưới namespace.

VD: Mình sẽ sử dụng use để nạp namespace của class ConNguoi, khi đó file index.php sẽ được viết như sau:: Mình sẽ sử dụng use để nạp namespace của class ConNguoi, khi đó file index.php sẽ được viết như sau:

3

 VD: Một file mà có khai báo namespace và use thì sẽ viết như sau:VD: Một file mà có khai báo namespace và use thì sẽ viết như sau:

4

4, Định danh cho namespace.

-Giả sử namespace của chúng ta rất dài hoặc vì một lý do nào đó mà bạn không muốn gọi namespace như thế, thì PHP cũng có cung cấp cho chúng ta một phương pháp đó là tạo định danh cho namespace.namespace của chúng ta rất dài hoặc vì một lý do nào đó mà bạn không muốn gọi namespace như thế, thì PHP cũng có cung cấp cho chúng ta một phương pháp đó là tạo định danh cho namespace.

-Để tạo định danh mới cho namespace trong PHP chúng ta sử dụng từ khóa

name;
    }
}
2 với cú pháp như sau:

5

VD: Tạo định danh cho namespace ConNguoi ở trên.: Tạo định danh cho namespace ConNguoi ở trên.

6

5, Nhiều namespace trong một file.

-Như ở trên mình có nói là khi khai báo namespace thì chúng ta phải đặt ở đầu file, nhưng nếu như ở trong một file có nhiều namespace thì chúng ta sẽ khai báo như sau:

7

VD::

-Tạo một file Class.php có nội dung như sau:

8

-Và chúng ta sẽ tạo một file index.php để gọi 2 class đó như sau:.

9

6, Lời Kết.

-Như vậy mình đã trình bày xong về namespace trong PHP rồi, hy vọng mọi người có thể nắm chắc kiến thức này để khi học các PHP framework như Laravel, Zend,... khỏi bị bỡ ngỡ. Bài tiếp theo chúng ta sẽ tìm hiểu về Trait trong PHP.namespace trong PHP rồi, hy vọng mọi người có thể nắm chắc kiến thức này để khi học các PHP framework như Laravel, Zend,... khỏi bị bỡ ngỡ. Bài tiếp theo chúng ta sẽ tìm hiểu về Trait trong PHP.