我有这样的结构:
main.php
include_once
func1.php
include_once
func2.php
这两个文件位于include
内main.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.php
内func2.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
答案 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); }
}