2

我对 PHP OOP 有点陌生,所以我需要你们的帮助。我试图了解何时在抽象类中使用抽象函数。

例如

abstract class User{
    abstract function login();
    //how do I decide if I should make login function as abstract or regular function.              
    abstract function permission();

    function AccountCredit (){
       echo 'show account credits';
    }

}
4

5 回答 5

2

抽象类是一个实际上创建(实例化)没有意义的类,就像你的类是“Beagle”和“Terrier”,“Dog”实际上没有意义。

颜色和发型只适用于“Beagle”和“Terrier”,但不适用于“Dog”,对吧?所以它在 Dog 级别是抽象的。

任何只适用于单一品种的方法根本不存在于“狗”中。

numberOfLegs 将在“Dog”级别(不是抽象)有一个实现,并且孩子们可以继承它(不说任何关于它的内容)。

请注意,如果您正在实例化实际的狗,则品种将变得抽象——同样,如果您正在实例化实际的狗,它们可能需要覆盖 numberOfLegs 以说明发生事故的个别狗。

但是,如果您是 OO 新手,我可以提个建议吗?将所有继承保持在最低限度,只有在你真的被迫时才这样做。似乎当一个优秀的程序员“获得”OO时,他们的第一个想法是将所有内容链接到一个巨大的对象树中——结果证明这不是很好。你最好使用封装而不是几乎每次都扩展。

于 2012-05-16T15:17:14.593 回答
1

如果没有所有子类可以使用的合理默认行为(如果他们选择或覆盖),则您可以创建一个抽象方法。

于 2012-05-16T15:14:38.950 回答
1

当您在一个类中定义抽象函数时(也必须声明为抽象),这意味着该函数必须在扩展此抽象类的类中实现。

如果功能非常不同或取决于扩展抽象类的类,您可以定义抽象函数。

于 2012-05-16T15:15:14.063 回答
1

所有用户的登录功能都相同吗?如果是这样,那么它应该尽可能低地实现(在这个抽象类中)。

如果有多种类型的用户,每一种都需要不同的登录功能,那么将其抽象化并在每个实现超类中以不同的方式实现它以满足每种用户类型的需求。

于 2012-05-16T15:15:54.080 回答
0

A abstract class is a contract between the abstract class and all classes that inherit from abstract class.

The diference between abstract class and an interface is that the interface don't implements any method, only the signatures of the methods.

When you inherit from a abstract class, you must implement all abstract methods. All the rest of not abstract methods, you will inherit it, the rest you extends how in a normal class

于 2012-05-16T15:33:48.267 回答