13

我正在尝试在公共静态函数中使用 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:: 当没有类范围处于活动状态时”。

如果我second_function在函数之外调用inside_this,它工作正常:

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

我需要做什么才能second_functioninside_this函数内使用?

4

3 回答 3

14

这是因为PHP 中的所有函数都具有全局作用域——即使它们是在函数内部定义的,它们也可以在函数外部调用,反之亦然。

所以你必须这样做:

 function inside_this() {    
   $some_var = MyClass::second_function(); 
 }     
于 2012-06-29T01:52:06.573 回答
3

适用于 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
于 2012-06-29T01:55:54.723 回答
0

尝试将您的第一个功能更改为

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
于 2012-06-29T02:36:48.137 回答