PHP面向对象

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

类的创建

  • 使用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类似,在外部调用某个不存在的静态方法时被调用
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值