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{
不起作用......
如果您的类结构允许,您可以将类拆分为几个不同的类,这些类是继承链的一部分:
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)