类中的require_once()

Ale*_*lex 5 php class function require

我注意到如果我在一个与外部函数同名的类方法中声明一个函数,我会收到一个错误:

function a(){
  ...
}

class foo{
  public function init(){
    function a(){  // <- error
    ...    
    }
    ...
  }

}
Run Code Online (Sandbox Code Playgroud)

但这会起作用:

function a(){
  ...
}

class foo{
  public static function a(){
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

我可以使用require_once或类似的东西包含一组作为此类的静态方法的函数吗?

require_once('file.php');之后class foo{不起作用......

Tgr*_*Tgr 1

如果您的类结构允许,您可以将类拆分为几个不同的类,这些类是继承链的一部分:

class foo1 {
    public static function a() {}
}
class foo extends foo1 {
    public static function b() {}
}
Run Code Online (Sandbox Code Playgroud)

或者,如果您愿意承受性能损失,则可以使用__callStatic() 。(需要 PHP 5.3;不过,如果您只需要非静态方法,则从 5.0 开始可以使用 __call。)Smarty 3 执行此 IIRC。

class foo {
    private static $parts = array('A', 'B');
    public static __callStatic($name, $arguments) {
        foreach (self::$parts as $part) {
            if (method_exists($part, $name)) {
                return call_user_func_array(array($part, $name), $arguments);
            }
        }
        throw new Exception();
    }
}
class A {
    public static function a() {}
}
class B {
    public static function b() {}
}
Run Code Online (Sandbox Code Playgroud)

据推测, PHP 5.4 将包含特征,这是在类中包含外部代码的更直接的方法:

class foo {
    use A, B;
}
trait A {
    public static function a() {}
}
trait B {
    public static function b() {}
}
Run Code Online (Sandbox Code Playgroud)