我曾经读过静态类非常困难甚至无法调试。这是真的吗?为什么?
如果一个例子有帮助,这里是我用来访问数据库的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();
}
}
?>
答案 0 :(得分:4)
只要你的静态类有方法而没有数据,它就只是一个命名空间。没问题。但是如果您有静态数据,则会遇到与全局变量相同的问题:您无法再通过查看本地信息来了解系统的行为。特别是在多线程环境中,您可能会遇到意外行为和调试困难。
答案 1 :(得分:1)
我认为您所阅读的内容与测试这些类有关。
如果对此有更好的深入解释,我建议您阅读Misco's博客。我发现它们是有价值的信息来源。
静态方法的基本问题是 它们是程序代码。我没有 想法如何对程序代码进行单元测试。 单元测试假设我可以 实例化我的一个应用程序 处于隔离状态。在实例化期间 我用依赖关系连接 嘲笑/友谊取代了 真正的依赖。随着程序 编程没有“连线” 因为没有对象,代码 和数据是分开的。