2013-07-04 5 views
0

나는 지향 객체 PHP를 배우고 있고 나는 바보 같은 짓을한다고 생각합니다.다른 추상 클래스에서 php 추상 클래스 속성

나는 추상적 인 userManager 클래스를 가지고 있으며,이 클래스에 abstract 데이터베이스 클래스의 인스턴스가 될 $ db 속성을 할당하려고한다.

abstract class Bdd{   
     private static $instance = null; 

     public static function getInstance() { 
      return self::$instance; 
     } 

그리고 userManager 클래스는 다음과 같습니다 :

데이터베이스 클래스입니다 public $db = Bdd::getInstance();

(구문 분석 오류 :

abstract class usersManager{ 
     public $db = Bdd::getInstance(); 

나는이 줄에 오류가 구문 오류, 예기치 못한 '(', 'expected', 'or')

이것이 잘못된가요?

내가 추상적 인 클래스를 오해 한 것 같아, 내 경우에는 싱글 톤이 더 좋을까? 당신은 클래스 변수를 선언하는 메소드를 호출하지 못할

답변

2

, 당신은

public $db = null 
public function __construct() { 
    $this->db = Bdd::getInstance(); 
} 

이 클래스를 확장 할 때의 유일한 잡았다가 수행해야합니다 그리고 당신은 당신이 필요로하는 생성자를 만들어야합니다 이 생성자를 호출하여 수행 할 수도 있습니다. parent::__construct();

+0

합법적이지만 내 클래스는 추상 클래스이고 __construct 메소드는 호출되지 않습니다 ... – FLX

+0

내 대답과 유사하지 않으면 __construct 함수가 호출됩니다. __construct 메서드를 선언하면 parent :: ___ construct()를 호출해야합니다. – Kris

+0

doc 및 권한을 확인했지만 공개 함수를 수행하더라도 {_35} \t \t} 구조 함수가 호출되지 않고 이유를 이해할 수 없습니다. 이 클래스의 또 다른 메소드가 호출됩니다. – FLX

0
public $db = Bdd::getInstance(); 

위의 행으로 인해 오류가 발생합니다. 변수를 선언 할 때는 메서드를 호출 할 수 없습니다.

0

클래스 매개 변수는 런타임이 아닌 컴파일 타임에 평가할 수 있어야합니다. 기본적으로 문자열, null, int의 e.c.t와 같은 간단한 값만 미리 정의 할 수 있습니다.

Bdd:getInstance()의 결과는 실행될 때까지 (예 : 실행 시간) 알 수 없기 때문에 미리 정의 된 값으로 사용할 수 없습니다.

대신 매개 변수를 null로 설정 한 다음 클래스 생성자 메서드에서 DB 인스턴스를 설정해야합니다.

관련 문제