另一个类里面的静态方法

时间:2016-05-18 04:02:03

标签: php model-view-controller

我有一个类名DBConnection:

   class DBConnection {

    public function __construct() {}
    public static function getConnection() {
        try{
            $conn = new PDO('mysql:host='.HOST.'; dbname='.DATABASENAME.'; charset=utf8', USERNAME, PASSWORD);
            return $conn;
        }catch(PDOException $e){
            echo("Connect to database failed");
        }

    }

}

一个班级名册:

require_once("DBConnection.php");
require_once("../entity/book.php");
class bookDA {

    private $conn = DBConnection::getConnection();//This line didn't work

    public function getAll() {
        $bookList = array();
        $stmt = $this->conn->prepare("SELECT * FROM booklist");
        $stmt->execute();
        while($result = $stmt->fetch(PDO::FETCH_ASSOC)) {
            $bookList[] = new book($result["bookId"], $result["bookName"], $result["bookPrice"]);
        }
        return bookList;
    }
    public function getByName($name) {
        $bookList = array();
        $stmt = $this->conn->prepare("SELECT * FROM booklist WHERE LIKE :name");
        $stmt->bindValue(":name", "%".$name."%", PDO::PARAM_STR);
        $stmt->execute();
        while($result = $stmt->fetch(PDO::FETCH_ASSOC)) {
            $bookList[] = new book($result["bookId"], $result["bookName"], $result["bookPrice"]);
        }
        return bookList;
    }

}

我在类DBConnection中创建一个静态方法:“getConnection”,在类中:“bookDA”我调用它但它不起作用。所以我试着把那些在bookDA课程之外没有用的行放在一起,这就像一个冠军。谁能告诉我为什么?

2 个答案:

答案 0 :(得分:1)

这是因为,表达式不允许作为字段默认值。

但是,Azure Mobile Apps Easy Tables,您可以使用after PHP 5.6

const ONE = 1;
const TWO = ONE * 2;

class C {
    const THREE = TWO + 1;
    const ONE_THIRD = ONE / self::THREE;
    const SENTENCE = 'The value of THREE is '.self::THREE;
}

对于您的情况,您需要使用类的构造函数或任何其他成员函数。

private $conn;

public function __construct()
{
    $this->conn = DBConnection::getConnection();
}

答案 1 :(得分:0)

我说HOSTUSERNAME等是常数吗?而且他们被宣布在你的DBConnection班以外的其他地方,即全球范围?

如果是这样,这就是原因。如果你在php.ini中设置了error_reporting设置为E_ALLdisplay_errors = On,那么PHP本身就会告诉你自己。

您需要将DBConnection中的常量定义为类常量,或使用不同的方式声明/定义数据库连接参数,即使用单独的YML或.php文件。