20191125PHP抽象类、接口和魔术方法

抽象类

不能被实例化,用于其他类的继承。使用abstract(抽象)。抽象方法一定是抽象类,抽象类不一定有抽象方法。

接口interface是特殊的抽象类。

eg:

<?php
//抽象类
abstract class person{
 function run(){
  echo "runing………………";
 }
 abstract function start();
}

class boys extends person{
    function start(){
        echo "子类的方法start";
    }
}

$a=new boys();
$a->run();

//接口的编写

interface student{
    function name();
    function study();
}

class stu implements student{
    function name(){
        echo "姓名";
    }
    function study(){
        echo "学习";
    }
}

$b=new stu();
$b->study();
==================================================================

魔术方法克隆__clone()。

<?php
//对象克隆和魔术方法__clone
class person{
    var $name;
    var $age;
    var $count=0;
 function __construct($name,$age){
     $this->name=$name;
     $this->age=$age;
 }
 function __clone(){
     $this->count+=1;
 }
 function run(){
  echo $this->name."runing………………";
 }
}
$a=new person("小明",23);
$a->run();
echo $a->count;
$b=clone $a;  //克隆对象
$b->run();
echo $b->count;
$c=new person("小花",22);
echo $c->count;
$d=clone $b;
echo $d->count;

 

魔术方法__get() __set()

<?php
class person{
    private $name;
    private $age;
    function __set($name,$value){
        $this->$name=$value;
        
    }
    function __get($name){
     return $this->$name;
    }
    
}

$a=new person();
$a->name="小明";
echo $a->name; 

魔术方法__call()、__tostring()

<?php
//__call()、__toString()
class person{
    function __call($name,$v){
        echo "您调用的方法".$name."不存在";
    }
    function __toString(){
      return "我是person类的信息";
    }
}
$a=new person();
$a->run();
$a->stop();
echo $a;

 其他的魔术方法:

__construct(),类的构造函数
__destruct(),类的析构函数
__call(),在对象中调用一个不可访问方法时调用
__callStatic(),用静态方式中调用一个不可访问方法时调用
__get(),获得一个类的成员变量时调用
__set(),设置一个类的成员变量时调用
__isset(),当对不可访问属性调用isset()或empty()时调用
__unset(),当对不可访问属性调用unset()时被调用。
__sleep(),执行serialize()时,先会调用这个函数
__wakeup(),执行unserialize()时,先会调用这个函数
__toString(),类被当成字符串时的回应方法
__invoke(),调用函数的方式调用一个对象时的回应方法
__set_state(),调用var_export()导出类时,此静态方法会被调用。
__clone(),当对象复制完成时调用
__autoload(),尝试加载未定义的类
__debugInfo(),打印所需调试信息

 

 

posted @ 2019-11-25 11:40  深夜起来玩游戏  阅读(214)  评论(0编辑  收藏  举报