2011-10-21 2 views
0

PHP에서 팩토리 패턴을 구현 중입니다. AbstractFactory 클래스가 있고 하나는 ConcreteFactory 클래스입니다. 다음은 내가 사용하고 코드입니다 :PHP에서 기본 클래스 객체로 파생 클래스 객체를 만드는 방법

/** AbstractFactory.php */ 
abstract class AbstractFactory{ 
     abstract function xyz(); 
} 


/** ConcreteFactory.php */ 
require_once "AbstractFactory.php" 
require_once "ABC.php" 
class ConcreteFactory extends AbstractFactory{ 
    public function xyz(
      return new ABC(); 
    ); 
} 


/** Client.php */ 

require_once "ConcreteFactory .php" 
class Client extends ConcreteFactory { 
    public function dothis() { 

     // Now i want to create AbstractFactory type object from ConcreateClass 

     AbstractFactory $afobject = new ConcreteFactory(); 
    } 
} 

(AbstractFactory $afobject) 구문 분석 오류를 반환합니다.
누구든지이 개체를 만드는 방법을 알려주시겠습니까?

답변

1

는이처럼 만들 : PHP의 실제 유형이 없습니다

$afobject = new ConcreteFactory(); 

, 다운 캐스팅이 필요하지 않도록. 추상적 인 공장처럼 개체를 사용하십시오. 일반적으로 문서에 표시합니다. 그러니까 그 객체를 추상적 인 팩토리만을 받아들이는 메소드에 전달한 다음, 당신의 문서의 @param 속성에 그 객체를 표시하고 싶다고합시다. 이 목적을 위해 타입 힌트를 사용하는 것은 권장하지 않습니다. 왜냐하면 구체적인 클래스를 넣으려고하면주의가 필요하기 때문입니다. 추상 팩토리가 있는지 확인하려면 메서드의 첫 번째 줄에서 instanceof를 사용하여 팩토리를 확인하십시오. 이 도움이

희망, 토마스 내가 여기에 전체 구문을 작성하지 않은

2

PHP는 Java가 아닙니다. 당신은 단지

$afobject = new ConcreteFactory(); 

AbstractFactory $afobject = new ConcreteFactory(); 

하고 당신에게 $의 afobject에서 ConcreteFactory 인스턴스를 줄 것이다 : 당신은 다음과 같이 인스턴스를 선언 할 수 없습니다.

뿐만 아니라 다른 구문 오류가 있습니다 :

public function xyz(
     return new ABC(); 
); 

public function xyz() { 
     return new ABC(); 
} 

을 읽어야하고 않는 IDE와 코드에

require_once "ConcreteFactory .php" 

시도 후 세미콜론 누락 구문을 강조 표시하거나 명령 줄에서 코드를 php -l filename으로 실행하여 보풀 제거하십시오.

+0

.... SP 구문 오류를 ingnore하시기 바랍니다 .. 나의 주요 관심사 : 클래스 객체에 대한했다 :) –

관련 문제