Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 继承时抽象类和非抽象类有什么区别_Php_Class_Inheritance_Abstract - Fatal编程技术网

Php 继承时抽象类和非抽象类有什么区别

Php 继承时抽象类和非抽象类有什么区别,php,class,inheritance,abstract,Php,Class,Inheritance,Abstract,在php中使用抽象类比使用非抽象类好几个小时了。我知道抽象类不能实例化,这是singleton设计模式的一个好特性。但我的观点是,既然它们都可以用作基类,那么还有其他理由使用抽象类吗?我发现的所有答案都没有提到这一点,它们只是回答了另一个问题,即使用基类的优势是什么? 所以,我的问题是,除了不能实例化之外,还有什么理由使用普通基类以外的抽象基类吗?抽象类不能直接实例化,但它可以同时包含抽象和非抽象方法 如果扩展抽象类,则必须实现其所有抽象函数,或者使子类抽象 不能重写常规方法并使其抽象,但必须(

在php中使用抽象类比使用非抽象类好几个小时了。我知道抽象类不能实例化,这是singleton设计模式的一个好特性。但我的观点是,既然它们都可以用作基类,那么还有其他理由使用抽象类吗?我发现的所有答案都没有提到这一点,它们只是回答了另一个问题,即使用基类的优势是什么?
所以,我的问题是,除了不能实例化之外,还有什么理由使用普通基类以外的抽象基类吗?

抽象类不能直接实例化,但它可以同时包含抽象和非抽象方法

如果扩展抽象类,则必须实现其所有抽象函数,或者使子类抽象

不能重写常规方法并使其抽象,但必须(最终)重写所有抽象方法并使其非抽象

抽象关键字用于将类或方法标记为模式。它类似于接口,但可以包含变量和方法的实现

关于抽象类有很多误解。下面是一个抽象Dog类的示例。如果一个开发人员想要为其他开发人员或自己创建一些基本的Dog类来进行扩展,他会将该类声明为抽象类。您不能直接实例化Dog类(没有人可以),但您可以通过自己的类扩展Dog。SmartDog扩展了Dog等

Dog类声明为抽象的所有方法必须在扩展Dog的每个类中手动实现


例如,抽象
类Dog
有一个抽象方法
Dog::Bark()
。但是所有的狗吠叫的方式都不同。因此,在每个Dog子类中,您必须具体描述狗是如何吠叫的,因此您必须定义例如
SmartDog::Bark()

“抽象类不能实例化,这是singleton设计模式的一个很好的特性”一个与另一个没有多大关系,请以后能够以任何方式实现这些方法?这在很大程度上取决于您如何设计应用程序,没有“这总是更好”的规则。有时您最好使用其中一个,有时另一个执行
Dog::Bark()
中的逻辑,即使您正在为
SmartDog::Bark()
实现自己的逻辑。我的意思是,如果一只狗用嘴汪汪叫,并且它在
dog::Bark()
中实现,您是否需要重新声明逻辑,即一只狗用嘴汪汪叫在
SmartDog::Bark()
中,或者它会留下来