2017-03-28 5 views
0

そうように私は、構造:func2.php別のinclude_onceファイルから関数を呼び出すときにエラーが発生しましたか?

main.php

のinclude_once func1.php

のinclude_onceは、これらの2つのファイルはincludeある「内側日間。

function switchboard()をからfinc2.phpに電話すると、次のエラーが表示されます。 switchboard() {} - 私はfunc2.php内部func1.phpから関数を呼び出すところ

Fatal error: Uncaught Error: Call to a member function switchboard() on null in func2.php:16 
Stack trace: 
#0 main.php(60): decode_func('{"auth":"...) 
#1 {main} thrown in func2.php on line 16 

ライン16です。 include ing func1.phpfunc2.phpの中にこれを修正する方法はありますか?あなたが機能decode()$ermを使用し、まだそれが含まれていないためだろう


func2.php

function decode($var) { 

    if() {return $var;} 
    else { $erm->switchboard('101', $var); } 
} 

func1.php

$erm = new CLASS() { 

    function switchboard($id, $var) { 

    if() {} 
    else {} 
    } 

} 
+0

これがレガシーコードではない場合は、フレームワークまたは少なくとも作曲者を使用して、より現代的な方法でアプリケーションを管理することを検討してください。 – Halfstop

+0

'func1.php'で呼び出されている' main.php' ...の内部に 'Exception'を設定しました。 'func1.php'が' func2.php'の中にある場合、それらはまだ動作しますか? @HankyPanky – Borsn

+0

@ HankyPankyそして、将来の拡張性のために、mainに 'func3.php'という3番目のファイルがあるとどうでしょうか?これを整理するよりエレガントで多様な方法がありますか? – Borsn

答えて

2

関数のスコープ(javascriptとは逆にphp関数はトン)

を自分の周囲のスコープを継承する匿名関数としてdecodeを宣言し、その中$ermを注入し、またはデコードの$erm引数を作るためにuseを活用することができます。

  • 無名関数

だけuse $のERMデコードの範囲内に含まれていることを確認するには:

$decode = function ($var) use ($erm) { 
    if() { return $var; } 
    else { $erm->switchboard('101', $var); } 
}; 
  • パラメータ

パス$erm他のパラメータと同様。

function decode ($var, $erm) { 
    if(false) { return $var; } 
    else { $erm->switchboard('101', $var); } 
} 
+0

今、私はこの文法エラー、予期しない「使用」(T_USE)、「{ – Borsn

+0

func2.phpファイルでは、 'function decode($ var1、$ var2)use($ erm)'としています。上記のコードと同じです。かっこ付き。エラーが関数を開いている行にあるとします。 – Borsn

+0

私は外部関数と呼ばれる行にも到達しません。私が試すことができる何か他にありますか? – Borsn

関連する問題