Php 具有单例的PDO无法访问私有属性
我用PDO和singleton模式建立了一个数据库连接。 只要我将Php 具有单例的PDO无法访问私有属性,php,pdo,singleton,Php,Pdo,Singleton,我用PDO和singleton模式建立了一个数据库连接。 只要我将$\u db变量设置为public,一切正常,但它需要是私有的。。。当我将其设置为私有时,我会意外地得到错误:无法访问私有属性数据库::$\u db 有人能告诉我如何使它私有化并且仍然能够获得一个实例吗 当我从另一个文件调用数据库连接时,我调用函数getInstance() 下面是我如何从一个文件中调用它的示例: $db = Database::getInstance(); $query = $db->_db->pre
$\u db
变量设置为public,一切正常,但它需要是私有的。。。当我将其设置为私有时,我会意外地得到错误:无法访问私有属性数据库::$\u db
有人能告诉我如何使它私有化并且仍然能够获得一个实例吗
当我从另一个文件调用数据库连接时,我调用函数getInstance()
下面是我如何从一个文件中调用它的示例:
$db = Database::getInstance();
$query = $db->_db->prepare("SELECT `password`, `id` FROM `users` WHERE `username` = ?");
这是我的数据库连接文件的外观:
class Database
{
private $_db;
static $_instance;
private function __construct()
{
$this->_db = new PDO('mysql:host=localhost;dbname=mvcuser', 'root', '');
$this->_db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
private function __clone(){}
public static function getInstance()
{
if (!(self::$_instance instanceof self))
{
self::$_instance = new self();
}
return self::$_instance;
}
public function query($sql)
{
return $this->_db->query($sql);
}
}
你不需要写
$db->\u db->
因为您已经在使用类的实例 这里有一个DB类的参考
$db = Database::getInstance();
每次决定进行查询或其他操作时,请仅使用$db->query()$db->prepare()代码>
看看您的代码:您已经在db类中使用了$\u db引用。
因此,您不需要将$\u db作为公共变量调用。哦,我再也无法忍受所有这些静态斗争了
这是一个缩小版的
使用静态类应该使用的方式
echo DB::query("SELECT 'foo'")->fetchColumn();
echo DB::lastInsertId();
如果没有这个\uu callStatic()
魔术,就像康弗里克所说的那样。,这是一个任务,所以不是我的选择。。。但是出于好奇,为什么不呢@Touki你可以检查隐藏在每个单词中的链接,知道为什么你不应该感谢刚刚注意到的:)@Touki仍然需要解决我的问题:(呃……你完全明白,“受保护”是什么意思吗?$db->prepare()
将失败,因为在数据库中没有这样的方法。当然不是,它作为适配器工作。您需要创建一个方法prepare(),并在类$this->_db->prepare()内调用它;我已经编写了(或一些仅限使用的东西),所以没有理由对我投反对票。我不知道为什么有些人总是认为,如果他们只是对那篇文章发表评论,他们就投了反对票!我没有对你投反对票。明白了!谢谢!我还添加了一个prepare()方法,效果非常好!@ComFreek
echo DB::query("SELECT 'foo'")->fetchColumn();
echo DB::lastInsertId();