ใช้นามแฝงของคลาสสำหรับเนมสเปซใน OOP ใน PHP
สมมติว่าเรามีสองคลาส Data,
ซึ่งอยู่ในเนมสเปซที่ต่างกัน
สมมติว่าในบางคลาสเราต้องการออบเจ็กต์
จากทั้งสองคลาสนี้:
<?php
namespace Project;
class Test
{
public function __construct()
{
$data1 = new \Core\Users\Data; // สร้างออบเจ็กต์
$data2 = new \Core\Admin\Data; // สร้างออบเจ็กต์
}
}
?>
สมมติว่าเราตัดสินใจจะย่อการเรียกใช้คลาส
ด้วยคำสั่ง use ในกรณีนี้เราจะ
พบปัญหา: ทั้งสองคลาสมีชื่อว่า Data,
ซึ่งหมายความว่าเราจะมีข้อขัดแย้งของชื่อ:
<?php
namespace Project;
// จะมีข้อขัดแย้งของชื่อ:
use \Core\Users\Data; // เชื่อมต่อคลาสแรก
use \Core\Admin\Data; // เชื่อมต่อคลาสที่สอง
class Test
{
public function __construct()
{
$data1 = new Data;
$data2 = new Data;
}
}
?>
สำหรับการแก้ปัญหานี้มีคำสั่งพิเศษ
คือ as ซึ่งอนุญาตให้กำหนดนามแฝงให้กับคลาสที่เชื่อมต่อ
- ชื่อที่คลาสนี้จะสามารถเข้าถึงได้ในไฟล์นี้ มาลอง
เปลี่ยนชื่อคลาส Dataของเรากัน:
<?php
namespace Project;
use \Core\Users\Data as UsersData;
use \Core\Admin\Data as AdminData;
class Test
{
public function __construct()
{
$data1 = new UsersData;
$data2 = new AdminData;
}
}
?>
ลดรูปโค้ดต่อไปนี้โดยใช้
use:
<?php
namespace Project;
class Test
{
public function __construct()
{
$pageController = new \Resource\Controller\Page;
$pageModel = new \Resource\Model\Page;
}
}
?>
ลดรูปโค้ดต่อไปนี้โดยใช้
use:
<?php
namespace Project\Data;
class Test
{
public function __construct()
{
$pageController = new \Project\Data\Controller\Page;
$pageModel = new \Project\Data\Model\Page;
}
}
?>