2016-05-18 8 views
1

私はクラス名のDBConnectionを持っている:staticメソッド

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"); 
     } 

    } 

} 

とクラス名bookDA:クラスのDBConnection内部 "のgetConnection"、そして中:

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; 
    } 

} 

私は、静的メソッドを作成しますクラス: "bookDA"私はそれを呼び出すが、それは動作しませんでした。だから私はbookDAクラスの外で動作しなかった行と、この作品をチャンピオンのように置こうとします。なぜ誰かが私に言うことができますか?

答えて

1

フィールドのデフォルト値として式を使用できないためです。

after PHP 5.6ただし、constant expressionsを使用できます。

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(); 
} 
+0

あなたが言いたい表現の種類。私はこのようなフィールドのデフォルト値を設定しようとします:private $ testField = 1 + 1とこの作業。 – khoibn

+0

詳細を提供するために私の答えを更新しました。 PHP 5.6の後に定数式だけが有効です – Burak

+0

ありがとうございます。今分かります。 – khoibn

0

私はHOSTUSERNAMEなどが定数であることを言って、正しいですか?そして、彼らはあなたのDBConnectionクラス以外のどこか、つまりグローバルスコープで宣言されていますか?

もしそうなら、これが理由です。 error_reportingE_ALLに、display_errors = Onを両方ともphp.iniに設定していた場合、PHP自身があなた自身に話してくれたはずです。

これらの定数をクラス定数としてDBConnectionに定義するか、別の方法でDB接続パラメータを宣言/定義する必要があります。つまり、別のYMLファイルや.phpファイルを使用する必要があります。

+0

ああ、@Burakも何かに乗っています:-) – theruss

+0

はい!私はconfig.phpファイルでそれらを定義し、DBConnectionでそれらを必要とします。 – khoibn

+0

それにもかかわらず、すべてのことが神聖で、エラー報告をオンにして、PHPがあなたに与えているエラーを見ることができるようにします。これらはあなたをソリューションに導くように設計されています。 @ Burakの答えに+1。 – theruss

関連する問題