你好,我想在 php 中学习一个单例模式,我有一堂课:
class Database
{
private static $instance;
private function __construct()
{
}
public static function getInstance()
{
if (!self::$instance)
{
self::$instance= new Database();
}
return self::$instance;
}
public function query($table)
{
$this->query = 'select * from $table';
}
public function result()
{
echo $this->query;
}
}
$db = Database::getInstance();
现在,是否可以调用 result() 方法并使用单例打印 query() 设置的值,即"从$table中选择 *"?
我希望我的代码是这样的:
$db->query('user_tb')->result();
//output
select * from user_tb;
更新:
能够这样称呼它:
$db->query('user_tb')->result();
您需要将return $this;
放入要链接的方法中,在本例中为query
方法:
public function query($table)
{
$this->query = "select * from $table";
return $this;
}
现在你可以这样称呼它:$db->query('user_tb')->result();
工作示例
-------------------------------------------------------------------------------------------
首先在query()
方法中进行修改:
$this->query = 'select * from $table';
自:
$this->query = 'select * from ' . $table;
因为在single quotes
内部,变量不会被解析。
然后在类级别定义$query
,如下所示:
class Database {
private static $Instance;
private $query = '';
// your more code
}
然后你可以运行这个来获取它:
$db = Database::getInstance(); // get class instance
$db->query('user_tb'); // set $query var
$db->result(); // get $query var
结果:
select * from user_tb
工作示例
若要使用方法链接,请确保要链接的所有函数都返回$this。
然后你可以做DB::getInstance()->query()->result();
.=
所以查询至少需要返回$this。
此外,您放弃了返回参数的任何错误处理,因此通常如果您使用方法链接,则需要使用异常处理来处理错误。
就像在,你不能做
if(!$db->query) {
error_log('bleh');
}