Create Logs using Singleton Design Patterns in PHP

Tiếp theo cho Singleton Design Patterns trong PHP.  Mình tiếp tục chia sẻ với mọi người về viết tạo class Logs bằng các sử dụng Singleton Design Patterns. Về Singleton thì mình có chia sẻ ở bài viết trước , bạn có thể xem lại lại đây:

Connect to Database using Singleton Design Patterns with PHP

Githubhttps://github.com/skipperhoa/Design-Patterns

Okay, giờ mình tạo class Logger theo kiểu Singleton 

<?php
class Logger {
    private static $instance;
    private $logs;

    private function __construct() {
        $this->logs = [];
    }

    public static function getInstance() {
        if (self::$instance === null) {
            self::$instance = new Logger();
        }

        return self::$instance;
    }

    public function log($message) {
        $this->logs[] = $message;
    }

    public function getLogs() {
        return $this->logs;
    }
}

$logger = Logger::getInstance();
$logger->log("Log message 1</br>");
$logger->log("Log message 2</br>");

$logs = $logger->getLogs();
foreach ($logs as $log) {
    echo $log . "\n";
}

?>

Hoặc cách dùng sau:

<?php

class Logger
{
    // Đây là biến tĩnh, dùng để lưu giữ instance duy nhất của lớp Logger
    private static $instance = null;

    // thuộc tính để lưu giữ đường dẫn đến file log
    private $logFile;

    // Make the constructor private to prevent instantiation
    private function __construct()
    {
        // Đường dẫn file log (app.log)
        $this->logFile = __DIR__ . '/app.log';

        // ghi một header "---- Log Start ----" vào đầu file log (chỉ khi file chưa có nội dung)
       // Kiểm tra nếu file log trống hoặc không tồn tại thì mới ghi header
       if (!file_exists($this->logFile) || filesize($this->logFile) === 0) {
            file_put_contents($this->logFile, "---- Log Start ----\n", FILE_APPEND);
        }
    }

    // Method to get the single instance of the Logger
    public static function getInstance()
    {
        if (self::$instance === null) {
            self::$instance = new Logger();
        }

        return self::$instance;
    }

    // Write a message to the log file
    public function log($message)
    {
        $timestamp = date('Y-m-d H:i:s');
        $formattedMessage = "[{$timestamp}] - {$message}\n";

        // Append the message to the log file
        file_put_contents($this->logFile, $formattedMessage, FILE_APPEND);
    }

    // Prevent cloning
    private function __clone() {}

    // Prevent unserialization
    private function __wakeup() {}
}
//__clone() và __wakeup() là các phương thức "magic" (phương thức đặc biệt) được PHP cung cấp sẵn

// Usage
$logger = Logger::getInstance();
$logger->log("Application started");

$anotherLogger = Logger::getInstance();
$anotherLogger->log("Another part of the application logs a message");

// Verify both instances are the same
var_dump($logger === $anotherLogger); // true

// Check the log file (app.log) to see the output

 

Bài Viết Liên Quan

x

Xin chào! Hãy ủng hộ chúng tôi bằng cách nhấp vào quảng cáo trên trang web. Việc này giúp chúng tôi có kinh phí để duy trì và phát triển website ngày một tốt hơn. (Hello! Please support us by clicking on the ads on this site. Your clicks provide us with the funds needed to maintain and improve the website continuously.)

Ngoài ra, hãy đăng ký kênh YouTube của chúng tôi để không bỏ lỡ những nội dung hữu ích! (Also, subscribe to our YouTube channel to stay updated with valuable content!)

Đăng Ký