在自然语言中,我们理解抽象的概念是,一个物体的一种大的描述,这种描述对某类物体来说是共有的特性。那么在PHP中也是一样的,我们把一个类进行抽象,可以指明类的一般行为,这个类应该是一个模板,它指示它的子方法必须要实现的一些行为。
PHP抽象类应用的定义:
abstract class ClassName{
}
PHP抽象类应用要点:
1.定义一些方法,子类必须完全实现这个抽象中所有的方法
2.定义为抽象的类不能被实例化,不能从抽象类创建对象,它的意义在于被扩展
3.抽象类通常具有抽象方法,方法中没有大括号
PHP抽象类应用重点:
1.抽象方法不必实现具体的功能,由子类来完成
2.在子类实现抽象类的方法时,其子类的可见性必须大于或等于抽象方法的定义
3.抽象类的方法可以有参数,也可以为空
4.如果抽象方法有参数,那么子类的实现也必须有相同的参数个数
PHP抽象类应用示例:
abstract public function getName(); //注意没有大括号
抽象类
1、任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。
2、定义为抽象的类不能被实例化。
3、被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。
4、继承一个抽象类的时候,子类必须定义父类中的所有抽象方法;另外,这些方法的访问控制必须和父类中一样(或者更为宽松)。例如某个抽象方法被声明为受保护的,那么子类中实现的方法就应该声明为受保护的或者公有的,而不能定义为私有的。
//设定抽象父类
abstract class parentClass
{
//定义抽象方法
abstract public function getValue();
//定义带参抽象方法
abstract public function setName($name='');
//普通方法
public function getSex($name='')
{
echo $name;
}
}
//派生类
class child_one extends parentClass
{
/*
实现父类抽象方法
*/
public function getValue()
{
//代码块...
echo get_called_class();
echo "getValue方法";
}
public function setName($name='')
{
//代码块...
echo get_called_class();
echo "setName方法";
}
}
$c_one = new child_one;
$c_one->getSex('张三');
//派生类
class child_two extends parentClass
{
/*
实现父类抽象方法
*/
public function getValue()
{
//代码块...
echo get_called_class();
echo "getValue方法";
}
public function setName($name='')
{
//代码块...
echo get_called_class();
echo "setName方法";
}
}
$c_two = new child_two;
php中抽象类和接口的区别
把属性和方法封装起来就是类。
一个类的属性和方法被另外的类复制就是继承,PHP里面的任何类都可以被继承,被继承的属性和方法都可以被子类重新定义,这就是多态性。
抽象类和抽象方法:
1、所谓抽象方法就是只有名字的空“函数”,而且抽象方法必须是空方法。
2、所谓抽象类就是包含抽象方法的类,同时抽象类也可以包含普通方法。
3、因为抽象方法必须是空方法,所以任何子类在继承抽象类的时候,都必须重新定义抽象方法的具体内涵,才能实现实例化。
接口:
1、只包含抽象方法的特殊抽象类。
2、接口是通过 interface 关键字来定义的,就像定义一个标准的类一样,但其中定义所有的方法都是空的。
3、接口中定义的所有方法都必须是公有,这是接口的特性。
4、要实现一个接口,使用 implements 操作符。类中必须实现接口中定义的所有方法,否则会报一个致命错误。类可以实现多个接口,用逗号来分隔多个接口的名称。
5、接口可以继承
列:
//创建A接口
interface A
{
public function setName();
public function getName();
}
//创建M接口
interface M extends A
{
public function setValue();
public function getValue();
}
//创建类
//实现接口
class B implements M
{
//实现接口A
function setName(){
}
function getName(){
}
//实现接口M
function setValue(){
}
function getValue(){
}
}