2017-01-05 8 views
1

変数を使用して名前空間を呼び出すことはできますか?例えばPHP変数を使用して名前空間を呼び出す

$class_name  = strtolower($interface_name); 
$return['html'] = \interfaces\$class_name::get_loginForm(); 

しかし、これはエラーを返します:

Parse error: syntax error, unexpected '$class_name' (T_VARIABLE), expecting identifier (T_STRING)

私はすべてが同じことをやっているいくつかのサードパーティのAPIのに接続しているが、独自のやり方でいます。私たちのサイトに参加する前に、ユーザーはすでに希望のAPIに接続しています。異なるAPIのミドルウェアは、同じ名前空間の別ファイルに格納されます。

インターフェイス名の切り替えと関連する名前空間の呼び出しの問題を解決することは可能ですが、新しいAPIが出てくるたびにスイッチを見つけて追加する必要がありますこの問題は認められるだろう。乾杯。

答えて

2

@Kris Roofeからの答えは動作するはずですが、私はcall_user_func_array機能と異なり、それに近づくだろうですhttp://php.net/manual/de/function.call-user-func-array.php

例:

call_user_func_array($function_as_string.'::'.$method_as_string, $params); 

ここで、$paramsは、メソッドparamsとして前記関数に渡されるデータの配列です。

だからあなたの例では、それはあなたの助けのための

call_user_func_array('\\interfaces\\'.$class_name'::get_loginForm'); 
2

あなたはこのようにそれを実行することができます:ここ

は、テストコードと live demo

<?php 
namespace App\animal; 
$animal = 'animal'; 

class dog{ 
    function __construct() 
    { 
     echo __METHOD__,"\n"; 
    } 
    public function data(){return 'dog';} 
    static function cat(){return 'cat';} 
} 

$name = '\App\\'.$animal.'\\dog'; 
$dog = new $name; 
echo $dog->data(); 
echo "\n"; 
echo $name::cat(); 
+0

おかげだろう!残念ながらエラーが返されています: 'Uncaught Error:クラス 'bromcom'が/path/classes/Model.phpに見つかりません:643' ....モデルがスコープの問題を引き起こしているかもしれない自分の名前空間の中にありますか? – joe92

+0

デモを今すぐ追加します –

+1

@ joe92私は今編集しました。デモを確認してください。 –

関連する問題