2017-03-28 32 views
0

我有一個結構,像這樣:從不同的include_once文件調用函數時發生錯誤?

main.php

include_once func1.php

include_once func2.php

這兩個文件include倒是裏面main.php

當我在finc2.php內撥打function switchboard()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是我打電話從func1.php在函數內部func2.php - switchboard() {}。除了include ing func1.php裏面有func2.php嗎?有沒有辦法解決這個問題?


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

我在'main.php'裏面設置了'Exception'',這個''在'func1.php'中被調用。如果'func1.php'在'func2.php'裏面,它們還能工作嗎? @HankyPanky – Borsn

+0

@HankyPanky爲了未來的可擴展性,如果有第三個文件說'func3.php' ...包含在main中呢?有沒有更優雅和多功能的方式來組織這個? – Borsn

回答

2

這將是因爲你在函數decode()使用$erm,但它是不包括在函數的範圍(讓我們記住,與JavaScript相反,PHP函數不會牛逼繼承其周邊範圍)

你可以聲明decode作爲一個匿名函數,並採取use優勢注入$erm裏面,或者使$erm解碼的參數。

  • 匿名函數

只是use $呃,以確保將其列入內部解碼的範圍:

$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

相關問題