2016-05-18 2 views
1

У меня есть имя класса 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"); 
     } 

    } 

} 

и имя класса bookDA:

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

} 

создать статический метод: "GetConnection" внутри класса DBConnection, и в класс: «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

Я правильно говорю, что HOST, USERNAME и т.д. являются постоянными? И что они объявлены где-то иначе, чем в вашем классе DBConnection, т. Е. Глобальной области?

Если это так, то почему. Если у вас также есть error_reporting, установленный на E_ALL и display_errors = On оба установлены в php.ini, сам PHP сказал бы вам столько же.

Вам необходимо определить константы внутри DBConnection как константы класса или использовать другой способ объявления/определения параметров соединения с DB, то есть с использованием отдельного файла YML или .php.

+0

Ah @Burak тоже на что-то :-) – theruss

+0

да! Я определяю их в файле config.php и требую их в DBConnection. – khoibn

+0

Независимо от того, что все хорошо, святой, включите отчет об ошибках, чтобы вы могли видеть ошибки, которые дает вам PHP. Они разработаны, чтобы привести вас к решению. +1 к ответу Бурака. – theruss

Смежные вопросы