我正在阅读 php 设计模式,我看到了这段代码:
<?php
require_once("DB.php");
class DatabaseConnection
{
public static function get()
{
static $db = null;
if ( $db == null )
$db = new DatabaseConnection();
return $db;
}
private $_handle = null;
private function __construct()
{
$dsn = 'mysql://root:password@localhost/photos';
$this->_handle =& DB::Connect( $dsn, array() );
}
public function handle()
{
return $this->_handle;
}
}
print( "Handle = ".DatabaseConnection::get()->handle()."\n" );
print( "Handle = ".DatabaseConnection::get()->handle()."\n" );
?>
除了最后两个打印语句外,我都理解。我一直在搞乱它,但我不明白静态函数以某种方式调用公共非静态函数。
我注意到我可以这样做:
DatabaseConnection::get()->get()->get()->handle();
但我不能这样:
DatabaseConnection::get()->handle()->get();
我只是不明白这是在做什么,除了调用 get 函数然后调用句柄函数。