Namespace trong PHP hướng dẫn dùng không gian tên. Namespace giúp nhóm các class, function, hằng vào một nhóm để dễ lập trình hơn.
Giới thiệu namespace trong php
Namespace nghĩa là không gian tên. Sử dụng namespace để nhóm các class, function, hằng vào trong một vùng không gian để dễ hình dung, dễ lập trình hơn.
Dùng namepace là cần thiết khi bạn code dự án có nghiệp vụ phức tạp. Mà ở đó bạn sẽ cần định nghĩa các class, các hằng giống tên nhưng khác chức năng, đặt trong namespace khác nhau.
Tạo namespace trong php
Cách 1: để tạo namespace , bạn dùng lệnh namespace tênNS; . Rồi sau đó cứ định nghĩa các class, function , các hằng ở phía dưới lệnh namespace như bình thường. Những gì định nghĩa ở dưới lệnh namespace sẽ nằm trong namespace đó cho đến khi hết file hoặc đến khi gặp namespace khác.
namespace tênNS1; … … namespace tênNS2; … …
Cách 2: dùng cú pháp như trên nhưng dấu ngoặc {} để bao bọc những gì thuộc namespace đó.
namespace tên { … … … }
Ví dụ tạo namespace trong php
<?php //ns.php namespace SITE; class sanpham{ public $id; function __construct(){ echo "<h4>Construct class sanpham</h4>";} } const PAGE_SIZE = 6; function chuhoa($str) { return mb_convert_case($str,0); } //////////////////////////////////////////////////////////////// namespace ADMIN; class sanpham { function __construct(){echo "Construct quản trị sản phẩm<br>"; } function add(){ echo "<h4>Form thêm sản phẩm</h4>"; } } const PAGE_SIZE=20; ?>
Sử dụng namespace
<?php //ns_using.php require_once "ns.php"; $sp = new SITE\sanpham; //Construct class sanpham echo $sp = SITE\PAGE_SIZE; //6 echo $ch = SITE\chuhoa("biết đủ"); //BIẾT ĐỦ echo "<hr>"; $sp = new ADMIN\sanpham; //Construct quản trị sản phẩm echo ADMIN\PAGE_SIZE; //20 echo $sp->add(); //Form thêm sản phẩm
Dùng tài nguyên từ namespace khác
Cách 1: ghi cụ thể đường dẫn theo kiểu \namespace\tainguyen
<?php //ns2.php namespace SP { const PAGE_SIZE = 20; } namespace BV { const PAGE_NUM = 5; echo $sodong = \SP\PAGE_SIZE + 1; //21 } ?>
Cách 2: dùng các lệnh use const … as , use function … as , use ..as để đặt alias (tên mới) thay vì dùng đường path dài.
<?php //ns3.php namespace SP { const PAGE_SIZE=10; function demSoSanPham() { return 100; } class sanpham { function __construct() { echo "<h4>class sanpham</h4>"; } } } namespace BV { const PAGE_NUM = 5; use const \SP\PAGE_SIZE AS PS; use function \SP\demSoSanPham as demSP; use \SP\sanpham as LT; echo $sodong = PS +1; //11 echo $sosp= demSP() - 1; //99 $t = new LT; //class sanpham } ?>
Chú ý khi dùng namespace
Khai báo namespace
phải đặt ở đầu tiên trong file php. Code như sau sẽ bị lõi
<?php //ns4.php $x=1; namespace SITE; //... ?>
Từ khóa __NAMESPACE__
Từ khóa __NAMESPACE__ là từ khóa có sẵn, nó trả về 1 chuỗi cho biết tên của namespace hiện hành. Ví dụ:
<?php //ns4.php namespace DIENTHOAI; echo __NAMESPACE__ , "<br>"; //DIENTHOAI function detail() { echo "<br>Func detail in ". __NAMESPACE__; } namespace LAPTOP; echo __NAMESPACE__ , "<br>"; //LAPTOP function detail() { echo "<br>Func detail in ". __NAMESPACE__; } ?>
<?php //ns4_using.php require 'ns4.php'; DIENTHOAI\detail(); //Func detail in DIENTHOAI LAPTOP\detail(); //Func detail in LAPTOP
Namepace có cấu trúc thứ bậc
Bạn có thể định nghĩa tên các namespace có cấu trúc thứ bậc cũng được
<?php //ns5.php namespace LAPTOP ; const PAGE_SIZE= 12; namespace LAPTOP\ADMIN; const PAGE_SIZE = 50; namespace LAPTOP\SITE; const PAGE_SIZE = 6;
<?php //ns5_using.php use const LAPTOP\ADMIN\PAGE_SIZE as PS1; //50 include "ns5.php"; echo "<br> PAGE SIZE " , LAPTOP\PAGE_SIZE; //12 echo "<br> PS ADMIN " , PS1; //50 echo "<br> PS SITE " , LAPTOP\SITE\PAGE_SIZE; //6
Namespace không được lồng nhau
Trong php, có thể tạo các namespace có cấu trúc thì được nhưng không tạo được namepage lồng nhau đâu, như dưới đây là lỗi.
<?php //ns6.php namespace LAPTOP { const PAGE_SIZE= 12; namespace ADMIN{ const PAGE_SIZE = 50; } }
Một vài link để bạn tham khảo thêm :
- https://www.w3schools.com/php/php_namespaces.asp
- https://www.php.net/manual/en/language.namespaces.php