Php 从不同的include_once文件调用函数时出错?
我有一个这样的结构:Php 从不同的include_once文件调用函数时出错?,php,function,php-7,anonymous-class,include-once,Php,Function,Php 7,Anonymous Class,Include Once,我有一个这样的结构: main.php 包括_oncefunc1.php 包括_oncefunc2.php 这两个文件位于main.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.ph
main.php
包括_oncefunc1.php
包括_oncefunc2.php
这两个文件位于main.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
当我从func1.php
内部finc2.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
-
交换机(){}
。除了include
ingfunc1.php
insidefunc2.php
,还有什么方法可以解决这个问题吗
func2.php
function decode($var) {
if() {return $var;}
else { $erm->switchboard('101', $var); }
}
$erm = new CLASS() {
function switchboard($id, $var) {
if() {}
else {}
}
}
func1.php
function decode($var) {
if() {return $var;}
else { $erm->switchboard('101', $var); }
}
$erm = new CLASS() {
function switchboard($id, $var) {
if() {}
else {}
}
}
这是因为您在函数
decode()
中使用了$erm
,但它不包括在函数的作用域中(请记住,与javascript相反,php函数不会继承其周围的作用域)
您可以将decode
声明为匿名函数,并利用use
将$erm
插入其中,或将$erm
作为decode的参数
- 匿名函数
$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); }
}
这是因为您在函数
decode()
中使用了$erm
,但它不包括在函数的作用域中(请记住,与javascript相反,php函数不会继承其周围的作用域)
您可以将decode
声明为匿名函数,并利用use
将$erm
插入其中,或将$erm
作为decode的参数
- 匿名函数
$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); }
}
如果这不是遗留代码,请考虑使用框架或至少作曲家以更现代的方式管理应用程序。我在代码< >函数1,PHP < /代码>中调用“代码> >异常< /代码> s内的代码>主体.php < /代码>…如果
func1.php
在func2.php
中,它们还会工作吗@HankyPanky@HankyPanky为了将来的可扩展性,如果main中包含第三个文件,比如func3.php
…该怎么办。有没有一种更优雅、更通用的方法来组织它呢?函数已经定义,但您试图从中调用它的对象不是对象。显示您的代码。@aynber这是在PHP7中定义匿名类的一种新方法。就这么做了。获得相同的错误。如果这不是遗留代码,请考虑使用框架或至少作曲家以更现代的方式管理应用程序。我有安装<代码>异常>代码> s内的代码> Meal.php <代码>……这是在代码>函数1,PHP < /代码>中调用的。如果func1.php
在func2.php
中,它们还会工作吗@HankyPanky@HankyPanky为了将来的可扩展性,如果main中包含第三个文件,比如func3.php
…该怎么办。有没有一种更优雅、更通用的方法来组织它呢?函数已经定义,但您试图从中调用它的对象不是对象。显示您的代码。@aynber这是在PHP7中定义匿名类的一种新方法。就这么做了。但是得到了同样的错误。现在我得到了这个错误语法错误,意外的'use'(T_use),期望是'{'
…是什么导致了这个错误?在func2.php文件中,我把它作为函数解码($var1,$var2)使用($erm)
。与上面的代码相同。带括号。表示错误在我打开函数的那一行。甚至到不了我调用外部函数的那一行。还有什么我可以尝试的吗?你真的可以粘贴不工作的代码以便我们重现错误吗?use关键字是已知的php功能,它可以工作。没有具体的代码,它只是在黑暗中戳;)刚刚做了。没有显示任何错误。但可能在eval.in上无法解释代码在多个文件之间分割的事实。当我禁用此函数时,我的代码一切正常。现在我收到此错误语法错误,意外的“使用”(t_use),期望{'
…这是什么造成的?在func2.php文件中,我将其作为函数解码($var1,$var2)使用($erm)
。与上面的代码相同。带括号。表示错误在我打开函数的那一行。甚至到不了我调用外部函数的那一行。还有什么我可以尝试的吗?你真的可以粘贴不工作的代码以便我们重现错误吗?use关键字是已知的php功能,它可以工作。没有具体的代码,它只是在黑暗中戳;)刚刚做了。没有显示任何错误。但在eval.in上可能无法解释代码在多个文件之间分割的事实。当我禁用此功能时,我的代码一切正常。