在PHP 5.2中启用严格的警告之后,我看到一个严格标准警告来自一个原本没有严格警告的编写的警告: 严格的标准 : 静态函数 Program :: getSelectSQL()在Program.class.inc中不应该是抽象的 有问题的函数属于一个抽象的父类程序,并被声明为抽象静态的,因为它应该在其子类(如TVProgram)中实现。 我确实在这里find了这个变化的参考: 丢弃抽象的静态类function。 由于疏忽,PHP 5.0.x和5.1.x允许在类中使用抽象静态函数。 从PHP 5.2.x开始,只有接口可以拥有它们。 我的问题是:有人可以清楚地解释为什么在PHP中不应该有一个抽象的静态函数?
考虑一个例子(用java编译) public abstract interface Interface { public void interfacing(); public abstract boolean interfacing(boolean really); } 为什么一个接口需要被“声明”为抽象的? 是否有其他规则适用于抽象接口? 最后:如果abstract是过时的,为什么包含在Java中? 有抽象接口的历史吗?
封装和抽象的精确区别是什么?
使用getter和setter有什么好处 – 只能得到和设置 – 而不是简单地使用这些variables的公共字段? 如果吸气人员和安装人员做的不仅仅是简单的get / set,我可以很快地把这个问题弄清楚,但是我不是100%清楚的: public String foo; 比任何更糟的是: private String foo; public void setFoo(String foo) { this.foo = foo; } public String getFoo() { return foo; } 而前者则less了许多样板代码。 从Java Web开发人员的观点来看,这里列出了我最喜欢的获奖者名单: 当你意识到你需要做的不仅仅是设置和获取价值,你不必改变代码库中的每个文件。 你可以在这里执行validation。 您可以更改正在设置的值。 您可以隐藏内部表示。 getAddress()实际上可以为你获得几个字段。 您已将公共界面与表单下的更改隔离开来。 有些图书馆期待这一点 reflection,序列化,模拟对象。 inheritance这个类,你可以覆盖默认的function。 你可以对getter和setter有不同的访问级别。 延迟加载。 人们可以很容易地告诉你没有使用Python。