无法访问 self:: 当没有类范围处于活动状态时


Cannot access self:: when no class scope is active

我正在尝试从公共静态函数中使用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