简单的抽象类概念

时间:2012-05-16 15:12:17

标签: php oop

我对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';
    }

}

5 个答案:

答案 0 :(得分:2)

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

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

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

numberOfLegs将在“Dog”级别(不是抽象)实现,并且孩子们可以继承它(通过不说任何事情)。

请注意,如果您实例化实际的狗,品种将变得抽象 - 如果您实例化实际的狗,他们可能需要覆盖numberOfLegs以解释发生事故的个体狗。

但是,如果您是OO的新手,我可以提出建议吗?保持所有的遗产至少,只有当你真的被迫时才这样做。似乎当一个优秀的程序员“获得”OO时,他们的第一个想法是将所有东西都链接到一个巨大的对象树中 - 结果证明它不能很好地工作。你最好使用封装而不是几乎每次扩展。

答案 1 :(得分:1)

如果没有合理的默认行为所有子类可以在他们选择或覆盖的情况下使用它们,那么你可以创建一个方法摘要。

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

抽象类是抽象类和从抽象类继承的所有类之间的契约。

抽象类和接口之间的区别在于接口不实现任何方法,只实现方法的签名。

从抽象类继承时,必须实现所有抽象方法。所有其余的非抽象方法,你将继承它,其余的你在普通类中扩展如何