PHP面向对象定义权限、魔术方法、接口、抽象类定义

简介:public公有的类成员,可以在任何地方被访问。protected受保护的类成员,可以被其自身以及其子类访问。private私有的类成员,只能被自身访问

面向对象的三种访问权限

  1. public公有的类成员,可以在任何地方被访问
  2. protected受保护的类成员,可以被其自身以及其子类访问
  3. private私有的类成员,只能被自身访问

静态成员调用

//子类调用父类静态成员
parent::$isvalue

//在本类中调用静态成员
self::$value

//在本类中调用静态成员
statc::$value 

(final )禁止子类重写父类的成员,父类成员前添加final关键字

final public function test(){}

(interface)接口定义:

interface IcanEat{
       //在接口中定义一个方法
       public function eat($food) 
}

(implements)定义一个接口

class Human implements IcanEat{}

abstract)抽象类的定义

//子类继承抽象类时必须实现抽象类定义的抽象方法
abstract class Index{
    //抽象方法
   abstract public function index();
          
   public function admin(){
               echo '这个方法子类可以不用实现';
   }
}

魔术方法

__construct()
//构造函数

__destruct()
//析构函数

__tostring()
//当对象被当做string使用是,这个方法会被自动调用列如:echo $obj;

__invoke()
//当对象当成方法调用时,这个方法会被自动调用,列如:$obj(5)

__call()
//当对象访问不存在的方法名称时,__call方法会被自动调用

__callStatic()
//当对象访问不存在的静态方法名时,__callStatic()方法会被自动调用

__get()
//当对象访问一个不存在的属性或属性权限设置不允许对象和子类调用时,这个方法会被自动调用

__set()
//当子类或对象给一个不存在的属性或属性权限设置不允许赋值时,这个方法会被自动调用

__isset()
//当我们用isset()函数去判断某个属性是否设置时,这个方法会被自动调用
//当我们用empty()判断某个对象的属性是否为空时,这个方法也会被自动调用

__unset()
//当我们用unset()释放某个对象的属性时,这个方法会被自动调用

(trait)面向对象实现多继承的代码块,定义如下所示​:

trait HttpClient
{
    protected $head;
    /**
     * 发送请求
     * @param $url 请求的url
     * @param null $param 请求的参数,为null时为get请求否则为post请求
     */
    public function request($url,$param=null,$content_type=null)
    {
    }
}

class Sso {

    use HttpClient;

    public function a(){
    ​    //调用trait中的成员属性
        var_dump($this->head);

    ​    //调用trait中的方法​
        $this->request();

    }

}

我们在封装代码时,会发现很多公共且相同的代码,这些代码可以在不同的类或服务中调用。一般人会把这种代码封装成一个类B,再用最总类去继承类B(这种方法有局限性,由于PHP不支持多继承,当你想继承其他类时改动就很大了)或者直接使用类B调用。但是除了上面这两种方式之外还有一种多继承的方法【trait代码块】,你可以直接在使用的类中使用use 代码块名,这样就可以在使用类中调用代码块中的方法或属性了

有遗漏或者不对的可以在我的公众号留言哦

编程经验共享公众号二维码

编程经验共享公众号二维码
更多内容关注公众号
Copyright © 2021 编程经验共享 赣ICP备2021010401号-1