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

包括_once
func1.php

包括_once
func2.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
ing
func1.php
inside
func2.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的参数

  • 匿名函数
只需使用$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的参数

  • 匿名函数
只需使用$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上可能无法解释代码在多个文件之间分割的事实。当我禁用此功能时,我的代码一切正常。