opp基础:
用class关键字声明一个,
类的成员有 类属性和类方法 和 构造方法
构造器可以给类属性初始化赋值,每次实例化都会自动调用构造方法
对象引用 $this-> 引用符:$this的意思就是本身,在$this中有个指针,谁调用它,他就指向谁,它只能再类内部使用。
带有final关键字的方法为最终方法,不能够被重写,但可以被子类继承
实例演绎
<?php
//父类
class Car
{
public $name; //类的属性前边加访问修饰符
public $carType;
private $member = 8.5;
//构造器,给类的属性初始化赋值,每次实例化,都会自动调用
public function __construct($name,$carType)
{
//$this-> 对象引用
$this->name = $name;
$this->carType = $carType;
}
//成员方法,
public function getPrice()
{
return "{$this->name}的热卖车型是{$this->carType}";
}
//一个方法被添加了final关键字,则意味这个方式为最终方法,不能被重写
final public function member()
{
return "本店的老用户,可以享受特殊优惠价格是所有车辆价格的{$this->member}折.";
}
}
类的继承和扩展
声明一个子类,继承和扩展父类,一个类为另一个类引用,实现类的扩展,这个类就是子类(扩展类),被继承的类就是父类(基类);
类的继承和扩展 是通过 extends关键字来是实现的
opp就有单继承的特点,这是单继承带来程序的高耦合性,这是它的一个缺点,为解决这个问题,PHP提供了trait 解决方案—————待学
类方法成员的重写与扩展: parent:: 关键字来调用类的成员方法,然后添加一些内容来实现类成员方法的重写; 也可以添加成员方法来实现类的功能扩展;
子类能重写父类中带有final关键字的方法,声明为final的方法,为最终方法;最终方法不能被重写,但是可以被子类继承;
类中的静态成员, static关键字,标志的是静态属性/静态方法, 静态成员只能为本类来调用,为所有实例所共享, 静态成员的访问方式是 self::,因为静态成员不能被实例化,所以静态成员的本质是类,只能使用类引用的方式访问就是self::方式;
实例演绎
<?php
//子类
class Carson extends Car
{
protected $price; //添加属性,实现属性扩展
static $discount = 8.8; //静态属性
static $count=0;
public function __construct($name,$carType,$price)
{
//是用parent:: 关键字来 继承父类的成员方法;
parent::__construct($name,$carType);
$this->price = $price;
self::$count ++;
}
public static function getCount()
{
echo "目前关注本网站的用户有".self::$count."位";
}
//使用parent:: 关键字引用类成员方法,添加内容,来实现类成员方法的重写
public function getPrice1()
{
return parent::getPrice()."正常价格是{$this->price},";
}
//添加类成员方法,来是实现类的扩展
public function getDiscount()
{
//声明为private的成员属性不能被外部访问,但是可以在本类中调用
return $this->getPrice1()."国庆节的优惠价格是".($this->price * self::$discount)."元.";//$discount是静态属性,须要通过self::来调用
}
}
类的实例化
自动加载器:通过spl_autoload_register函数来实现一个自动加载器,需要注意的是类名必须和文件名相同,才能实现类的自动加载功能
<?php
spl_autoload_register(function($className)
{
require $className.'.php';
});
在客户端代码中 加载一个自动加载器,来实现类的自动加载
<?php
require 'autoload.php';
//使用NEW 关键字 将类赋给一个变量 实现类的实例化
$car1 = new Carson('BMW','330i运动型',380000);//第一次实例化
echo $car1->getDiscount();
echo "<br>";
//通过instanceof关键字检测 $car1是不是 Carson的是实例,是就返回true,不是则返回flase
var_dump($car1 instanceof Carson);
echo '<br>';
$car = new Car('BMW','330i运动型');
echo $car->member();//访问类中的最终方法
echo '<br>';
$car2 = new Carson('BWM','530li豪华型',450000);//二次实例化
$car3 = new Carson('BWM','750li行政版',1450000);//三次实例化
echo $car2->getDiscount();
echo '<br>';
echo $car3->getDiscount();
echo '<br>';
$car2::getCount();//每次实例化,自加一,来实现用户调用的检测