对于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