我正在尝试从公共静态函数中使用PHP函数,如下所示(我缩短了一点):
class MyClass {
public static function first_function() {
function inside_this() {
$some_var = self::second_function(); // doesnt work inside this function
}
// other code here...
} // End first_function
protected static function second_function() {
// do stuff
} // End second_function
} // End class PayPalDimesale
那时我收到错误"无法访问 self::当没有类范围处于活动状态时"。
如果我在inside_this
函数之外调用second_function
,它可以正常工作:
class MyClass {
public static function first_function() {
function inside_this() {
// some stuff here
}
$some_var = self::second_function(); // this works
} // End first_function
protected static function second_function() {
// do stuff
} // End second_function
} // End class PayPalDimesale
我需要做什么才能在inside_this
函数中使用second_function
?
这是因为 PHP 中的所有函数都具有全局范围 - 即使它们是在函数内部定义的,也可以在函数外部调用它们,反之亦然。
所以你必须做:
function inside_this() {
$some_var = MyClass::second_function();
}
适用于 PHP 5.4:
<?php
class A
{
public static function f()
{
$inner = function()
{
self::g();
};
$inner();
}
private static function g()
{
echo "g'n";
}
}
A::f();
输出:
g
尝试将第一个函数更改为
public static function first_function() {
$function = function() {
$some_var = self::second_function(); // now will work
};
///To call the function do this
$function();
// other code here...
} // End first_function