PHP工廠模式的實現:
工廠模式是一種常用的面向對象設計模式,它通過定義一個工廠類來創建和返回其他對象的實例,而不需要直接使用new關鍵字實例化對象。以下是一個簡單的PHP工廠模式的實現示例:
<?php
// 定義一個接口
interface Shape {
public function draw();
}
// 實現接口的具體類
class Circle implements Shape {
public function draw() {
echo "Drawing a circle\n";
}
}
class Square implements Shape {
public function draw() {
echo "Drawing a square\n";
}
}
// 定義一個工廠類
class ShapeFactory {
public static function createShape($type) {
switch ($type) {
case 'circle':
return new Circle();
case 'square':
return new Square();
default:
throw new Exception("Unsupported shape type: $type");
}
}
}
// 使用工廠類創建對象
$circle = ShapeFactory::createShape('circle');
$circle->draw(); // 輸出 "Drawing a circle"
$square = ShapeFactory::createShape('square');
$square->draw(); // 輸出 "Drawing a square"
單例模式的實現:
單例模式是一種常用的面向對象設計模式,它確保類只有一個實例,并提供全局訪問該實例的方法。以下是一個簡單的PHP單例模式的實現示例:
<?php
class Database {
private static $instance;
private $connection;
private function __construct() {
// 私有構造函數,防止通過new關鍵字實例化類
$this->connection = mysqli_connect('localhost', 'username', 'password', 'database');
}
public static function getInstance() {
if (!self::$instance) {
self::$instance = new Database();
}
return self::$instance;
}
public function getConnection() {
return $this->connection;
}
}
// 使用單例類獲取數據庫連接
$db = Database::getInstance();
$connection = $db->getConnection();
// 使用$connection進行數據庫操作
在上面的示例中,Database類的構造函數是私有的,因此不能直接通過new關鍵字實例化類。通過getInstance()方法獲取類的唯一實例,如果實例不存在,則創建一個新實例并返回,否則直接返回已存在的實例。通過getConnection()方法可以獲取數據庫連接對象,然后可以使用該連接對象進行數據庫操作。