从其他include_once文件调用函数时出错?

时间:2017-03-28 17:24:33

标签: php function php-7 anonymous-class include-once

我有这样的结构:

  

main.php

     
    

include_once func1.php

         

include_once func2.php

  

这两个文件位于includemain.php

当我从function switchboard()内的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.phpfunc2.php调用该函数的地方 - switchboard() {}。除了include func1.php内的func2.php function decode($var) { if() {return $var;} else { $erm->switchboard('101', $var); } } 之外,还有办法解决这个问题吗?

func2.php

 $erm = new CLASS() {

   function switchboard($id, $var) {

     if() {}
     else {}
   }

 }

func1.php

20170602 13:17:59

1 个答案:

答案 0 :(得分:2)

那是因为你在函数$erm中使用decode(),但它没有包含在函数的范围内(让我们记住,与javascript相反,php函数不会继承它们的周围范围)

您可以将decode声明为匿名函数,并利用use在其中注入$erm,或使$erm成为解码参数。

  • 匿名函数

只需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); }   
}