我曾经读过静态类非常困难,甚至无法调试.这是真的吗?为什么?

Mik*_*ore 5 language-agnostic static static-classes

我曾经读过静态类非常困难,甚至无法调试.这是真的吗?为什么?

如果一个例子有帮助,这里有一个PHP我用来访问数据库的类(我不认为这是一个特定于PHP的问题):

<?php

class DB
{
    private static $instance;

    private function __construct() { }

    public static function getInstance()
    {
        if(!self::$instance)
        {
            self::$instance = new PDO('mysql:host=' . DB_HOST . ';dbname=' . DB_NAME . ';', DB_USER, DB_PASS);
        }
        return self::$instance;
    }

    public static function getPreparedStatement($query)
    {
        $db = self::getInstance();
        return $db->prepare($query);
    }

    public static function query($query)
    {
        $stmt = self::getPreparedStatement($query);
        $stmt->execute();
    }

    public static function getResult($query)
    {
        $stmt = self::getPreparedStatement($query);
        $stmt->execute();
        return $stmt;
    }

    public static function getSingleRow($query)
    {
        $stmt = self::getPreparedStatement($query);
        $stmt->execute();
        return $stmt->fetch();
    }

    public static function getMultipleRows($query)
    {
        $stmt = self::getPreparedStatement($query);
        $stmt->execute();
        return $stmt->fetchAll();
    }
}

?>
Run Code Online (Sandbox Code Playgroud)

Joh*_*ook 4

只要你的静态类有方法但没有数据,它就只是一个命名空间。那里没问题。但是,如果您有静态数据,您会遇到与全局变量相同的问题:您无法再通过查看本地信息来了解系统的行为。特别是在多线程环境中,您可能会遇到意外行为和困难的调试。