抽象类和接口的区别:
抽象类:(抽象类是通过abstract)
1.抽象类不能被实例化
2.方法被声明为静态时,此类必须被声明为静态类
3.抽象类中可以没有静态方法
4.抽象方法中不能定义具体功能实现
5.继承抽象类的子类必须实现抽象类中的所有抽象方法(控制权限只能比他放宽)
6.抽象类中的方法不能被声明为private私有,因为抽象类是为了便于子类继承去实现
接口:(接口是通过 interface,对接口的使用方式是通过关键字implements来实现的)
1.接口中定义的所有方法都必须是公有的
2.继承接口的类必须实现接口方法
class People{
//声明一个静态变量
public static $country = "chinese";
public $myparam = "姓名";
//声明一个静态方法
public static function StaticFun(){
return self::$country."===".static::$country;
}
//非静态方法中可以调用常规变量和静态变量
public function getParam(){
return $this->myparam."==".self::$country;
}
}
class Person extends People{
public function funStatic(){
//调用父类中的变量或者静态方法
return parent::$country."===".parent::StaticFun();
}
}
//静态类的使用可以直接实例化通过对象去访问也可以不实例化直接用类名::直接去访问
$p = new People();
$p1 = new Person();
echo $p->StaticFun()."<br>";
echo People::$country."<br>";
echo People::StaticFun()."<br>";
echo $p->getParam()."<br>";
echo $p1->funStatic()."<br>";
echo Person::$country;
/*
(1).类中存在抽象方法时,类必须声明为静态类
(2).静态类中可以存在非静态方法或者不存在静态方法
(3).静态方法不能定义其具体的功能实现
(4).抽象类中的抽象方法 继承的子类必须全部实现
(5).抽象类不能被声明为private私有,否者子类无法继承实现
*/
abstract class AbstractClass{
abstract public function getValue();
abstract public function getValue1();
public function printEcho(){
echo "shuju";
}
}
abstract class SonAbstractClass extends AbstractClass{
abstract function good();
}
class SonClass extends SonAbstractClass{
public function getValue(){
echo "哈哈"."<br>";
}
public function good(){
echo "sdfsdfsdfsd";
}
public function getValue1(){
echo "sdsfsdfd";
}
}
$son = new SonClass();
$son->getValue();
$son->printEcho();