2009-09-02 11 views
3

私はルータと呼ばれるPHPクラスを使用して、URLを取得し、要求されたコンポーネント、アクション、および任意の値を見つけるためにそれを爆発させます。その後、責任クラスをロードし、アクションなどを実行します。ユーザークラスを介してクラスへのユーザーアクセスを統合します。変数を介してクラスにアクセスする静的関数

それぞれのコンポーネント(クラス)について、私は、各アクションをインデックスとして保持し、アクションを実行するために必要な最小限のパーミッションとしての数字を持つ 'perms'という静的なクラス配列変数を持っています。各コンポーネントには、渡されたアクション名のパーミッション値を取得する静的関数もあります。

私が抱えている問題は、静的関数が変数に格納されているクラスの名前で正しく機能するようになってしまうことです。ルータでは、変数を使用してコンポーネントの名前を保持します。

$this->controller // cms, calendar ,etc 

私はその後、私は

静的関数にアクセスするためにそれを使用しようとすると

$class = $this->controller.'Controller'; // cmsController, calendarController, etc 

は、しかし、私はエラーを取得していたクラスの名前を取得するには、それまで「コントローラ」を追加します

$minActionPerm = $class::getPerms($this->action); // No go, parse error 

文字通りクラス名を入力するとエラーは表示されませんが、これは実際の解決策ではありません。

$minActionPerm = cmsController::getPerms($this->action); // Good, but literal 

変数は、アクションを実行するクラスのオブジェクトを作成するときにも機能します。

$object = new $class(); 

これはおそらく、変数の使用などの単純な回答ですが、今のところ分かりません。

答えて

5

call_user_func機能を使用する必要があります。

例:

call_user_func($class . '::getPerms', $this->action); 

call_user_func(array($class, 'getPerms'), $this->action); 

あなたはまた、このようにそれを行うことができます5.2.3+ PHPを使用している場合

関連する問題