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 的实例并获取适当的值,例如: $a->getElements()

 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 回答