具有可变数量参数的 PHP 工厂类

标签 php oop factory

我要制作一个(某种)工厂类,它接受可变数量的参数并将它们传递给它将要调用的类

<?php

class A {
    private $a;
    private $b;
    private $c;
    public function __construct($a=1, $b=2, $c=3){
        $this->a = $a;
        $this->b = $b;
        $this->c = $c;
    }
}

class B {
    private $foo;

    public function __construct(){
        $args = func_get_args();
        $this->foo = call_user_func_array(array('A', '__construct'), $args);
    }

    public function getObject(){
        return $this->foo;
    }
}

$b = new B(10, 20, 30);  
var_dump($b->getObject()); // should return equivalent of new A(10,20,30);

我遇到了这个错误

PHP Warning:  call_user_func_array() expects parameter 1 to be a valid callback, non-static method A::__construct() cannot be called statically

最佳答案

在阅读有关 ReflectionClass 的内容时找到了这个答案.这似乎效果最好

<?php
class Factory {
    # ...
    public function __construct(){
        $args = func_get_args();
        $a = new ReflectionClass('A');
        $this->foo = $a->newInstanceArgs($args);
    }
    # ...
}

关于具有可变数量参数的 PHP 工厂类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9639745/

相关文章:

java - 具有不同类型和数据的事件

model-view-controller - 报告生成逻辑在 MVC 结构中应该放在哪里?

没有 if-else block 的 JavaScript 工厂模式

php - 如何避免 WooCommerce 电子邮件模板中的样式注入(inject)

java - 为什么我要加上 "static"

php - 移动设备中 100% 视口(viewport)宽度的问题?

angularjs - 从 AngularJS 外部调用工厂

java - 适配器与工厂模式

java - 使用 Java 获取页面源仅读取第一行

php - 如何在服务器中获取 curl header