1

私はこの問題を抱えています:

<?php

class A {
}

class B {
}

$objectsInArray = array();
$objectsInArray[] = new A();
$objectsInArray[] = new B();

class C {
    private $a;
    private $b;
    public function __construct(A $a, B $b) {
        $this->a = $a;
        $this->b = $b;
    }
}

次のように、 $ objectInArrayをクラスC()に直接渡すにはどうすればよいですか。

$c = new C($objectsInArray);

このエラーメッセージなし:

Catchable fatal error: Argument 1 passed to C::__construct() must be an instance of A, array given...

そして私はこの理由を望んでいません:

class C {
    private $a;
    private $b;
    public function __construct(array $arguments) {
        foreach ($arguments as $argument) {
            if ($argument instanceof A) {
                $this->a = $argument;
            } elseif ($argument instanceof B) {
                $this->b = $argument;
            } else {
                throw new exception('Arguments are bad!');
            }
        }
    }
}

回答ありがとうございます。

4

1 に答える 1

0

すでに宣言したようにクラス C を宣言できますが、必要なすべての値を保持する配列プロパティを持つ A と B を実装することもお勧めします。したがって、A と B のインスタンスを作成して、適切な値を取得できます。たとえば、次のようになります。

 class A {
     private $a;
     public addElement($element) {
         // add element to the array $a
     }
     public getElements() {
          return $a;
     }
 }

Bクラスも同様。または、A と B に共通の機能を持つ親クラスを作成することもできます。

したがって、A と B は配列機能をカプセル化するだけであり、これらのインスタンスを操作することはできますが、配列を操作することはできません。

その後、問題なく A と B のインスタンスを C のコンストラクターに渡すことができます。

于 2013-02-01T15:14:27.430 に答える