对于PHP的抽象类和接口区分的一直不是很清楚,重新补习了下,顺便记录下学习笔记。
抽象类
抽象类的几个特性:
1. 抽象类可以没有抽象方法
2. 可以声明属性
3. 可以声明常量属性
4. 抽象方法,不能包含方法体
5. 如果类包含抽象方法,则必须声明为抽象类
抽象类,抽象方法使用关键字 abstract
声明。常量使用作用域解析符(::
)进行存取。
示例1包含常量,普通属性,普通方法,抽象方法的抽象类:
<?php
abstract class AbstractUser
{
public $name;
const AGE=1;
public function fetchUser()
{
return $this->name;
}
abstract public function setUser($username);
}
示例2不含有抽象方法的抽象类:
<?php
abstract class AbstractUser
{
public $name;
const AGE=1;
public function fetchUser()
{
return $this->name;
}
}
抽象类的继承类
抽象类的继承类必须实现抽象类的抽象方法,访问控制(public,protected,private)只能比抽象类抽象方法的访问控制更宽松或者一样。函数名,与函数参数个数必须一致,允许扩展新的类方法。
例如,一个继承了示例1的继承类
class User extends AbstractUser
{
public function setUser($username)
{
$this->name = $username;
}
public function fetchAge()
{
echo self::AGE;
}
}
$user = new User;
$user->setUser('vilay');
echo $user->fetchUser();
echo '<br>';
echo $user::AGE;
echo '<br>';
$user->fetchAge();
结果示例:
vilay
1
1