ホームページ > バックエンド開発 > PHPチュートリアル > factory - PHP工程模式如何传入参数

factory - PHP工程模式如何传入参数

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
リリース: 2016-06-06 20:49:26
オリジナル
1318 人が閲覧しました

我有个需求

比如下面 function Factory($classname) { return new $classname(); }

$tiger = Factory("Tiger");

但如果我Tiger类构造方法有参数的话,如何通过工厂来传参呢?

要适应所有类: 不用构造方法有不同的参数个数, 直接在构造方法后面加上参数貌似行不通, 并且我也不希望通过传array的办法来解决。

回复内容:

我有个需求

比如下面 function Factory($classname) { return new $classname(); }

$tiger = Factory("Tiger");

但如果我Tiger类构造方法有参数的话,如何通过工厂来传参呢?

要适应所有类: 不用构造方法有不同的参数个数, 直接在构造方法后面加上参数貌似行不通, 并且我也不希望通过传array的办法来解决。

反射一下

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

class test{

    function __construct($config = ''){

        if(!empty($config)){

            var_dump($config);

        }else{

            echo 'no params';

        }

    }

}

function Factory($classname, $params='') {

     if(!empty($params) ){

        $reflect  = new ReflectionClass($classname);

        return $reflect->newInstanceArgs($params);

     }else{

        return new $classname();

     }

 

}

$config_test = array('a','b','c');

Factory('test');

Factory('test', $config_test);

ログイン後にコピー

参考:
http://www.php.net/manual/zh/class.reflectionclass.php
http://www.600mhz.net/php/php_runtime_instance_class_and_pass_parameters.html/comment-page-1

関連ラベル:
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
PHP 拡張子 intl
から 1970-01-01 08:00:00
0
0
0
phpのデータ取得?
から 1970-01-01 08:00:00
0
0
0
PHP GET エラー レポート
から 1970-01-01 08:00:00
0
0
0
phpを上手に学ぶ方法
から 1970-01-01 08:00:00
0
0
0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート