0

phpでファクトリパターンを実装しています。AbstractFactoryクラスがあり、1つはConcreteFactoryクラスです。以下は私が使用しているコードです:

/** 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 )解析エラーを返します。
このオブジェクトの作成方法を教えてもらえますか?

4

2 に答える 2

2

PHPはJavaではありません。次のようにインスタンスを宣言することはできません。

AbstractFactory $afobject = new ConcreteFactory();

あなたはただする

$afobject = new ConcreteFactory();

これにより、$afobjectにConcreteFactoryインスタンスが作成されます。

他の構文エラーもあります:

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

読む必要があります

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

後にセミコロンがありません

require_once "ConcreteFactory .php"

php -l filename構文の強調表示を行うIDEでコーディングするか、コマンドラインからコードを実行してリントしてみてください。

于 2011-10-21T09:31:52.297 に答える
1

次のように作成します。

$afobject = new ConcreteFactory();

PHPには実際の型がないため、ダウンキャストは必要ありません。オブジェクトを抽象ファクトリであるかのように使用するだけです。通常、ドキュメントでそのことを示します。したがって、そのオブジェクトを抽象ファクトリのみを受け入れるメソッドに渡し、ドキュメントの@param属性でそれを指定するとします。具体的なクラスに入れようとすると通知が表示されるため、この目的でタイプヒントを使用することはお勧めしません。抽象ファクトリを確実に取得したい場合は、メソッドの最初の行にあるinstanceofで確認してください。

これがお役に立てば幸い、トーマス

于 2011-10-21T09:36:03.033 に答える