Namespace là gì? Tại sao phải dùng nó?

Namespace – Nếu nói về lập trình nói chung hẳn các bạn sẽ không còn xa lạ gì với từ khóa này, mà bạn thường hay gặp ở các ngôn ngữ lập trình như C++, C#, Java… Và PHP cũng vậy, từ phiên bản >= 5.3, PHP bắt đầu đưa namespace vào hoạt động. Và có khá nhiều Framework hiện nay đã áp dụng nó vào trong các dụng của họ. Tại sao vậy? Các bạn cùng tôi suy luận 1 chút.

Đã bao giờ các bạn nhìn thấy 2 file cùng tên file, tên class khi được gọi chúng ra 1 file nào đó, khi khởi tạo đối tượng sẽ không bị thông báo lỗi nào chưa. Tất cả là nhờ Namespace.

– Vậy sử dụng nó như thế nào?

Đơn giản bạn chỉ việc đặt từ khóa namespace lên trên đầu file sau tab mở php. Ví dụ:

<?php

namespace abc;

?>

và lưu ý rằng trên từ khóa namespace không được chứa bất kỳ ký tự nào.

– Gọi nó ra như thế nào đây?

Điều đầu tiên bạn phải chắc file đó đã được gọi ra file hiện hành và khởi tạo đối tượng theo cú pháp:

new Ten_Namespace\Ten_Classđây

hoặc bạn có thể sử dụng từ khóa use

use Ten_Namespace\Ten_Class as Ten_Class_Moi;

new Ten_Class_Moi;

Ví dụ:  file có tên là abc.php và nội dung của nó như sau:

<?php

namespace core;

class Abc

{

// To do something…

}

?>

và bây giờ tôi sẽ gọi file abc.php vào file bcd.php

<?php

require_once ‘abc.php’;

new core\Abc;

/*

use core\Abc as Abc_new;

new Abc_new;

*/

?>

Sẽ có nhiều bạn thắc mắc vậy mình có thể thêm nhiều khoảng không gian tên sau dấu “\” được không. Câu trả lời là có, bạn có thể thêm nhiều không gian tên vào phía sau và khi gọi nó ra sẽ đi kèm với tên của Class đứng phía sau nó.. Ví dụ:

<?php

namespace core\Application\Request\AbstractRequest;

?>

 

– Vậy tại sao phải dùng namespace như vậy. Tại sao không khởi tạo 1 lớp bình thường, không sử dụng namespace mà phải thêm nó vào làm gì cho rắc rối?

Nếu ứng dụng của bạn chỉ nằm trong 1 bài toán nhỏ? có thể bạn không cần dùng đến nó. Nhưng khi bạn gặp 1 ứng dụng lớn, đòi hỏi khả năng Update & Upgrade thường xuyên, lúc đó bạn sẽ thấy được tầm quan trọng của nó. Tại sao? bởi vì lúc đó ứng dụng của bạn sẽ có hàng trăm hay hàng ngàn lớp khác nhau. Làm sao để bạn có thể ghi nhớ hết tất các tên lớp mà không để nó trùng nhau.

***** Lưu ý:

Khi bạn đã đưa namespace vào ứng dụng của bạn. Bắt buộc các đối tượng nằm khi được gọi vào và khởi tạo đều phải có khai báo namespace của đối tượng đó. Nếu không PHP sẽ không hiểu được bạn đang khởi tạo đối tượng thuộc namespace nào.

Vậy các lớp đối tượng cơ bản do PHP tạo ra như mysqli, PDO, DateTime… sẽ khai báo namespace như thế nào?

Bạn chỉ việc thêm dấu “\” vào trước các lớp cơ sở của PHP. Ví dụ:

<?php

namespace core;

class Abc

{

public function index()

{

$db = new \PDO;

}

}

Bài tiếp theo tôi sẽ nói về cấu trúc thư mục của 1 Framework

 

Share this:

Thích bài này:

Thích

Đang tải…

Rate this post

Viết một bình luận