PHP面向对象

来源:互联网 发布:电脑桌面 知乎 编辑:程序博客网 时间:2024/06/07 18:06

面向对象编程是一种更高层次的抽象,是一种更有序,灵活和直观的编程方式

类的创建

  • 使用class关键字创建一个类,通常,类名首字母大写

    class NewClass{//创建属性public $attribute1;protected $attribute2;private $attribute3;//创建方法public function method1(){}protected function method2(){}private function method3(){}}

对象的创建

  • 使用new关键字+类名创建该类的一个对象

    class Test{public $attribute1 = 'test_attribute';}$new_test_obj = new Test;    //当构造函数不需要参数来初始化一个对象时,类名后可以不写括号echo $new_test_obj->attribute1;//访问一个对象的属性时,属性前面不能写美元符$结果:test_attribute
  • 重写构造函数__construct可以在创建一个对象时对其属性进行初始化

    class Test{public $attribute1 = 'test_attribute';    function __construct($value1)   {     $this->attribute1 = $value1;   }}$new_test_obj = new Test('传递参数');echo $new_test_obj->attribute1;  结果:传递参数
  • 重写析构函数__destruct可以在一个对象被销毁时执行定义的代码(使用unset销毁一个对象,或者脚本执行结束会被自动销毁

静态属性和方法的调用

静态属性和方法可以在不创建对象的情况下直接使用类名调用(对象也可以调用),但在php中,操作符也区别,静态属性和方法的调用使用双冒号::作为操作符

静态方法中,不允许使用$this来调用本类的其他方法和属性,需要使用self(调用本类),parent(调用父类),static(优先调用本类,不存在时调用父类),也需要使用::来访问,并且需要给属性加上美元符$,静态属性和方法前也可以被public,protected.private修饰

class Car {    protected static $speed = 10;    public function getSpeed() {        return self::$speed;           //静态属性的访问必须添加美元符    }}class CarChild extends Car{    static $speed = 20;    public function getParentSpeed()    {        return parent::$speed;    }}$car = new Car();$car_child = new CarChild;echo Car::$speed;      //类名直接访问echo $car::$speed;        //对象访问echo $car->getSpeed(); //通过方法从内部读取echo $car_child->getParentSpeed()  //子类对象读取

继承

  • 如上所示,使用extends关键字继承

    class ChildClass extends ParentClass{}

重载

  • 使用__set,__get,__isset,__unset__call,__callstatic方法可以设置在访问不存在的属性和方法时进行的操作,从而动态地给对象增加属性或者方法。(当然,由于php是弱类型的语言,其变量本身不需要事先定义,因此直接给不存在的属性赋值也可以动态地创建新的属性)
  • __set在给不存在的属性(或外部不可见的内部属性)赋值时被调用,并会得到两个参数——属性名,根据这两个参数可以动态构建属性
  • __get在读取不存在的属性(或外部不可见内部属性)赋值时被调用,并会得到一个参数——属性名,根据该参数可以采取响应操作
  • __isset在外部使用isset函数判断某个不能被外部访问的属性是否存在时调用,并会得到一个参数——属性名,根据该参数可以采取响应操作
  • __unset在外部使用unset函数销毁某个不能被外部访问属性时被调用,并会得到一个参数——属性名,根据该参数可以采取响应操作
  • __call在外部调用不存在的普通方法时被调用,并会得到两个参数——方法名传入的参数数组,遍历该数组可以得到外部给该属性传递的所有参数,根据方法名和参数可以执行不同操作,据此可以实现根据参数区别同名方法(java或c++种的重载)
  • __callstatic__call类似,在外部调用某个不存在的静态方法时被调用
原创粉丝点击