我有一个类名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课程之外没有用的行放在一起,这就像一个冠军。谁能告诉我为什么?
答案 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)
我说HOST
,USERNAME
等是常数吗?而且他们被宣布在你的DBConnection
班以外的其他地方,即全球范围?
如果是这样,这就是原因。如果你在php.ini中设置了error_reporting
设置为E_ALL
和display_errors = On
,那么PHP本身就会告诉你自己。
您需要将DBConnection
中的常量定义为类常量,或使用不同的方式声明/定义数据库连接参数,即使用单独的YML或.php文件。