PHP 单例模式


PHP singleton pattern

你好,我想在 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');
}