抽象类和方法:
抽象类是父类的模板。通常定义一个抽象类,可以指明类的一般行为。
抽象类和普通类的最大区别在于,如果试图从抽象类创建一个对象将会出现一个致命的错误,相反,抽象类就是用来扩展的,然后创建这些类的实例。
抽象类的定义方式:abstract
知识拓展:
方法__toString()介绍
如果在类中定义了这个方法,当这个类的对象用作string类型的时候就会自动调用这个方法。
对象被定义为复杂的变量类型,并不期望作为标量变量来使用。然而,在类中增加一个__toString()方法对开发者来说也是比较常见,至少可以作为一个简单的调试工具。
作为一个开发者,通常在类中定义一个__toString()方法,我们可以在类中被当作一个字符串来使用的时候知道该怎么做,而不是让PHP产生错误。
如果我们设置方法的可见性,只要定义时在abstract关键字之后添加相应的关键字。
Abstract public functionmethodName();
抽象类:
Abstract class Dog{
Protected $_name;
Abstract public function getname();
}
class Cat extends Dog{
function getname(){
return $this->_name;
}
}
注意:在扩展的类实现抽象方法的时候,比如Cat::getname()方法,其可见性必须高于或等于抽象方法定义的可见性。如果抽象方法是public,扩展类的实现方法也必须是公开的。如果抽象方法是protected,那么扩展类将只能是受保护的或者公开的,方法的实现也要必须和抽象方法的定义具有一样数目的参数。
只要类中有抽象方法,那么这个类就是抽象类。一个类可以没有抽象方法,和属性一样,抽象方法需要被派生类继承。
【示例】创建抽象类和方法
Abstract class shape{
}
需要记住的是,一个类被声明为抽象类后,就不能从它创建对象。
定义一个抽象方法:
Abstract protected functiongetarea();
这个方法表示shape类的任何子类都需要定义一个getarea()方法,而且具体实现的方法不能有任何参数,其可见性必须是public或者protected(可见性相同或者更强)。
定义第二个抽象方法:
Abstract protected functiongetperimeter();
【示例】创建Triangle类
1. 声明Triangle类:
Class Triangle extendsshape{
2. 声明属性
Private $_sides =array();
Private$_perimeter = null;
第一个属性用数组保存三条边的长度,第二个变量将会用于保存周长。所有的属性都是私有的,因为它们不应该被类外的代码访问,并且我们也无法想象一个Triangle类如何被继承。
3. 定义构造函数
Function __ construct($s0 = 0,$s1 = 0,$s2 = 0){
$this -> _sides[] = $s0;
$this -> _sides[] = $s1;
$this -> _sides[] = $s2;
$this -> _perimeter = array_sum($this->_sides);
}
Array_sum()函数会把数组里的全部元素累加到一起。
4. 创建getarea()方法:
public functiongetarea(){}
5. 创建getperimeter()方法:
Public functiongetperimeter(){}