PHP单例模式

时间:2012-06-11 07:17:08

标签: php oop class singleton return

你好,我想学习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;

2 个答案:

答案 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();

Working Example

----------------------------------------------- --------------------------------------------

首先修改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

Working Example

答案 1 :(得分:-1)

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

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

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

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

如同,你不能做

if(!$db->query) {
    error_log('bleh');
}