13

次のように public static 関数内から 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_function関数内から使用できるようにするには、何をする必要がありinside_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 に答える