คำสั่ง use และ namespace ใน OOP ใน PHP
สมมติว่าเรามีคลาส Data ต่อไปนี้:
<?php
namespace \Core\Admin;
class Data
{
public function __construct($num)
{
}
}
?>
และสมมติว่ามีคลาส Page ซึ่งสร้างอ็อบเจ็กต์ของคลาส Data ภายใน:
<?php
namespace Users;
class Page
{
public function __construct()
{
$data1 = new \Core\Admin\Data('1');
$data2 = new \Core\Admin\Data('2');
}
}
?>
ดังที่คุณเห็น คลาสทั้งสองของเราอยู่ใน namespace ที่ต่างกันโดยสิ้นเชิง ดังนั้นการเรียกใช้คลาส Data จึงไม่สามารถทำให้ง่ายได้ เหมือนที่เราทำในบทเรียนก่อนหน้า อย่างไรก็ตาม การเรียกใช้นี้ยาวและไม่สะดวกมาก เพราะในแต่ละครั้งที่เรียกคลาส Data ต้องระบุ namespace ที่ยาวของมัน
เพื่อแก้ปัญหาประเภทนี้ มีคำสั่งพิเศษชื่อ use ด้วยคำสั่งนี้เพียงแค่ต่อคลาสด้วยชื่อเต็มของมันหนึ่งครั้ง และหลังจากนั้นคุณจะสามารถอ้างถึงคลาสนี้ด้วยชื่อคลาสเพียงอย่างเดียว ดูตัวอย่าง:
<?php
namespace Users;
use \Core\Admin\Data; // ต่อคลาส
class Page extends Controller
{
public function __construct()
{
$data1 = new Data('1'); // เรียกง่ายๆ ด้วยชื่อ
$data2 = new Data('2'); // เรียกง่ายๆ ด้วยชื่อ
}
}
?>
ทำให้โค้ดต่อไปนี้ง่ายขึ้นโดยใช้ use:
<?php
namespace Project;
class Test
{
public function __construct()
{
// สร้างอ็อบเจ็กต์ 3 อันของคลาสเดียวกัน:
$data1 = new \Core\Users\Data('user1');
$data2 = new \Core\Users\Data('user3');
$data3 = new \Core\Users\Data('user3');
}
}
?>
กำหนดคลาสต่อไปนี้:
<?php
namespace Core\Admin;
class Controller
{
}
?>
<?php
namespace Users;
class Page extends \Core\Admin\Controller
{
}
?>
ทำให้โค้ดการสืบทอดคลาสง่ายขึ้น โดยใช้คำสั่ง use