2013-10-10 24 views
1

我正在做一个需要一些SQL东西的函数,并且我不想为每个函数定义一个新的PDO对象,但有一个可以工作的函数在所有功能上。PHP在类中定义一个新的PDO对象(外部函数)

这是我走到这一步:

<?php 
class UserSystem 
{ 
    public $mysqlDetails = 
    [ 
     "host"  => "127.0.0.1", 
     "user"  => "", 
     "pass"  => "", 
     "database" => "", 
     "table"  => "" 
    ]; 

    public $con = new PDO 
    (
     "mysql:host=" . $this->mysqlDetails['host'] . 
     ";dbname=" . $this->mysqlDetails['database'] . ";", 
         $this->mysqlDetails['user'], 
         $this->mysqlDetails['pass'] 
    ); 

我怎么能得到这个工作?目前,我得到这个错误: Parse error: syntax error, unexpected 'new' (T_NEW)。有没有更好的方式来做到这一点,所以我可以使用的功能$con变量,而无需创建一个新的。 我不想像我见过的那样将它注入到函数中。 IE这样的:

<?php 
function someFunc ($pdo) 
{ 
    $pdo->query("SELECT * FROM `someTable`"); 
} 
+0

而不是在类内初始化PDO,你应该将它注入为依赖项。您可以使用[this](http://stackoverflow.com/a/11369679/727208)方法作为基础并加以改进。您当前的实施违反了[SOLID](http://en.wikipedia.org/wiki/SOLID_(面向对象设计))原则中的几个。 –

回答

1

不能与任何东西,但编译时间分辨的常数值初始化类属性。你必须创建在构造函数中的PDO对象:

public function __construct() { 
    $this->con = new PDO(...); 
} 

更重要的是,你应该让你的类接受一个PDO对象和依赖注入它,因为我会猜你需要一个数据库连接不仅仅是这一类,而且你也不想一次又一次地在不同的类中连接同一个数据库:

public function __construct(PDO $con) { 
    $this->con = $con; 
} 
+0

谢谢你,我现在使用的一个构造函数,解决了一个干净简单的方法我的所有问题。 我做一个私有变量$ CON然后将其设置在构造函数中,如果任何人阅读此有同样的问题。 –

相关问题