-2

您好,我想在 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;
4

2 回答 2

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;

因为 inside 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

工作示例

于 2012-06-11T07:20:22.860 回答
-1

要使用方法链接,请确保要链接的所有函数都返回 $this。

然后你可以做DB::getInstance()->query()->result();.=

所以查询至少需要返回$this。

此外,您通过返回参数放弃任何错误处理,因此通常如果您使用方法链接,则需要使用异常处理来处理错误。

如,你不能做

if(!$db->query) {
    error_log('bleh');
}
于 2012-06-11T07:42:24.117 回答