2017-03-28 33 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

相关问题