问题是在Java中为什么我不能定义一个抽象的静态方法?例如
abstract class foo {
abstract void bar( ); // <-- this is ok
abstract static void bar2(); //<-- this isn't why?
}
Run Code Online (Sandbox Code Playgroud) 我最近一直与提供商合作,我遇到了一个有趣的情况,我希望有一个抽象的静态方法.我读了一些关于这个主题的帖子,这有点意义,但有一个很清楚的解释吗?
在PHP 5.2中启用严格警告后,我看到一个项目的严格标准警告,这些警告最初是在没有严格警告的情况下编写的:
严格标准:静态函数 Program :: getSelectSQL()在Program.class.inc中不应该是抽象的
有问题的函数属于抽象父类Program,并被声明为abstract static,因为它应该在其子类中实现,例如TVProgram.
我确实在这里找到了对此更改的引用:
删除了抽象的静态类函数.由于疏忽,PHP 5.0.x和5.1.x允许在类中使用抽象静态函数.从PHP 5.2.x开始,只有接口才能拥有它们.
我的问题是:有人可以清楚地解释为什么在PHP中不应该有一个抽象的静态函数?
这是我的例子:
trait FileConfig {
public static function getPathForUploads() {
$paths = static::getPaths();
//etc.
}
abstract public static function getPaths(); //doesn't work. Error: "Static function SharedDefaultConfig::getPaths() should not be abstract"
abstract public function getPaths(); //OK
public static function getPaths() {} //OK
}
Run Code Online (Sandbox Code Playgroud)
类:
class AppConfig {
use FileConfig;
public static function getPaths() {
return array(...);
}
}
Run Code Online (Sandbox Code Playgroud)
呼叫:
AppConfig::getPathForUploads();
Run Code Online (Sandbox Code Playgroud)
将它设置为静态和抽象(使用FileConfig强制类来实现getPaths)是必要的.
我想知道如何实现改变它的静态属性的方法?这是一个好习惯还是有更好的解决方案?有一天会变成非法吗?
谢谢