Heim  >  Artikel  >  Backend-Entwicklung  >  正确理解PHP抽象类应用_PHP教程

正确理解PHP抽象类应用_PHP教程

WBOY
WBOYOriginal
2016-07-15 13:33:18731Durchsuche

对于

在自然语言中,我们理解抽象的概念是,一个物体的一种大的描述,这种描述对某类物体来说是共有的特性。那么在PHP中也是一样的,我们把一个类进行抽象,可以指明类的一般行为,这个类应该是一个模板,它指示它的子方法必须要实现的一些行为。

PHP抽象类应用的定义:

abstract class ClassName{

}

PHP抽象类应用要点:

1.定义一些方法,子类必须完全实现这个抽象中所有的方法
2.不能从抽象类创建对象,它的意义在于被扩展
3.抽象类通常具有抽象方法,方法中没有大括号

PHP抽象类应用重点:

1.抽象方法不必实现具体的功能,由子类来完成
2.在子类实现抽象类的方法时,其子类的可见性必须大于或等于抽象方法的定义
3.抽象类的方法可以有参数,也可以为空
4.如果抽象方法有参数,那么子类的实现也必须有相同的参数个数

PHP抽象类应用示例:

abstract public function_name(); //注意没有大括号

作为演示,我们来实现一个简单的抽象类:计算矩形的面积。这个矩形可以从形状类扩展。

<ol class="dp-xml">
<li class="alt"><span><span class="tag"><span> ?PHP   </span></span></span></li>
<li><span>abstract class Shape {   </span></li>
<li class="alt"><span>abstract protected function get_area();   </span></li>
<li><span>//和一般的方法不同的是,这个方法没有大括号   </span></li>
<li class="alt">
<span>//你不能创建这个抽象类的实例:$</span><span class="attribute">Shape_Rect<br></span><span> = </span><span class="attribute-value">new</span><span> Shape();   </span>
</li>
<li><span>}   </span></li>
<li class="alt"><span>class Rectangle extends Shape{   </span></li>
<li><span>private $width;   </span></li>
<li class="alt"><span>private $height;   </span></li>
<li>
<span>function __construct($</span><span class="attribute">width</span><span>=</span><span class="attribute-value">0</span><span>,<br>$</span><span class="attribute">height</span><span>=</span><span class="attribute-value">0</span><span>){   </span>
</li>
<li class="alt">
<span>$this-</span><span class="tag">></span><span class="attribute">width</span><span>=$width;   </span>
</li>
<li>
<span>$this-</span><span class="tag">></span><span class="attribute">height</span><span>=$height;   </span>
</li>
<li class="alt"><span>}   </span></li>
<li><span>function get_area(){   </span></li>
<li class="alt">
<span>echo ($this-</span><span class="tag">></span><span>width+$this-</span><span class="tag">></span><span>height)*2;   </span>
</li>
<li><span>}   </span></li>
<li class="alt"><span>}   </span></li>
<li>
<span>$</span><span class="attribute">Shape_Rect</span><span> = </span><span class="attribute-value">new</span><span> Rectangle(20,30);   </span>
</li>
<li class="alt">
<span>$Shape_Rect-</span><span class="tag">></span><span>get_area();   </span>
</li>
<li>
<span class="tag">?></span><span>   </span>
</li>
<li class="alt"><span class="tag"><span> ?PHP  </span></span></li>
<li><span>abstract class Shape {  </span></li>
<li class="alt"><span>abstract protected function get_area();  </span></li>
<li><span>//和一般的方法不同的是,这个方法没有大括号  </span></li>
<li class="alt">
<span>//你不能创建这个抽象类的实例:$</span><span class="attribute">Shape_Rect</span><span> <br>= </span><span class="attribute-value">new</span><span> Shape();  </span>
</li>
<li><span>}  </span></li>
<li class="alt"><span>class Rectangle extends Shape{  </span></li>
<li><span>private $width;  </span></li>
<li class="alt"><span>private $height;  </span></li>
<li>
<span>function __construct($</span><span class="attribute">width</span><span>=</span><span class="attribute-value">0</span><span>,$</span><span class="attribute">height</span><span>=</span><span class="attribute-value">0</span><span>){  </span>
</li>
<li class="alt">
<span>$this-</span><span class="tag">></span><span class="attribute">width</span><span>=$width;  </span>
</li>
<li>
<span>$this-</span><span class="tag">></span><span class="attribute">height</span><span>=$height;  </span>
</li>
<li class="alt"><span>}  </span></li>
<li><span>function get_area(){  </span></li>
<li class="alt">
<span>echo ($this-</span><span class="tag">></span><span>width+$this-</span><span class="tag">></span><span>height)*2;  </span>
</li>
<li><span>}   </span></li>
<li class="alt"><span>}  </span></li>
<li>
<span>$</span><span class="attribute">Shape_Rect</span><span> = </span><span class="attribute-value">new</span><span> Rectangle(20,30);  </span>
</li>
<li class="alt">
<span>$Shape_Rect-</span><span class="tag">></span><span>get_area();  </span>
</li>
<li>
<span class="tag">?></span><span> </span>
</li>
</ol>

这也算是一个简单的例子,基本上可以说明PHP中抽象类的用法了,其他的不想多说了。个人觉得抽象类一般在大的项目才会用吧,因为我觉得它实在是要遵守的”规矩”太多了,用起来不方便!当然这只是我的意见。还想多说一些,PHP抽象类应用是单继承的,也就是说你只能从一个类继承,而不能一个类继承了A类,又继承B类,如果要实现这样的功能,得使用接口相关的知识了,在此暂时不讨论PHP接口的知识!一句话:单继承多接口中!


www.bkjia.comtruehttp://www.bkjia.com/PHPjc/446068.htmlTechArticle对于 在自然语言中,我们理解抽象的概念是,一个物体的一种大的描述,这种描述对某类物体来说是共有的特性。那么在PHP中也是一样的,...
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn