你好,我想学习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()设置的值“select * from $ table”?
我希望我的代码类似于:
$db->query('user_tb')->result();
//output
select * from user_tb;
答案 0 :(得分:4)
能够像以下一样调用它:
$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
答案 1 :(得分:-1)
要使用方法链接,请确保您要链接的所有函数都返回$ this。
然后你可以DB::getInstance()->query()->result();
。=
所以查询至少需要返回$ this。
此外,您通过返回参数放弃任何错误处理,因此通常如果使用方法链接,则需要使用异常处理来处理错误。
如同,你不能做
if(!$db->query) {
error_log('bleh');
}