我有以下四个PHP文件:
1。 Singleton.php
<?php
class Singleton {
private static $instance = null;
protected function __clone() {}
private function __construct() {}
public static function getInstance() {
if (self::$instance === null) {
self::$instance = new self;
}
return self::$instance;
}
}
?>
2。 Debugger.php
<?php
interface Debugger {
public function debug($message);
}
?>
3。 DebuggerEcho.php
<?php
require_once 'Singleton.php';
require_once 'Debugger.php';
class DebuggerEcho extends Singleton implements Debugger {
public function debug($message) {
echo $message . PHP_EOL;
}
}
?>
4。 TestSingleton.php
<?php
require_once 'DebuggerEcho.php';
$debugger = DebuggerEcho::getInstance();
$debugger->debug('Hello world');
?>
问题是,当我拨打专线$debugger->debug('Hello world')
时。我想保留这个结构,但避免这个(经典)消息:
Call to undefined method Singleton::debug() in TestSingleton.php.
出了什么问题?谢谢你的帮助。
答案 0 :(得分:2)
表达式new self
创建一个包含它的类的对象;这里Singleton
。要创建用于调用的类的对象,可以使用new static
代替(假设您使用的是PHP 5.3或更高版本):
public static function getInstance() {
if (self::$instance === null) {
self::$instance = new static;
}
return self::$instance;
}
另请参阅:What does new self(); mean in PHP?
并不是Singleton
的这种实现不能真正重用,因为它只支持一个实例。例如,您不能将此Singleton
类用作数据库连接和记录器的基类:它只能保存一个或另一个。