类与对象基本知识
基本知识
1、OOP 就是指面向对象编程
2、类:是指对象的模板; 对象:是指类的实例。
3、 面向对象编程三步骤:创建类、添加类成员(属性<变量>、方法<函数>)、访问类成员(成员指向符->
)
—————————————————————————————————————————————————
3.1 创建类
//1、创建类
class
{
类成员...
}
3.2 添加类成员
//2、添加类成员:类中变量叫属性,函数叫方法
//创建属性:必须加访问限制符
public $site = 'php中文网';
//创建方法
public function getSite()
{
//要访问当前类中的属性值,必须先实例化类(创建对象)
$obj = new Demo1;
return $obj->site;
}
3.3 访问类成员
// 类必须实例化后才可以访问里面的普通成员
//实例化类: $变量名=new 类名([参数]);
//3、访问类成员
$obj = new Demo1;
//访问类属性:$变量名->属性名;
echo $obj->site;
echo '<br>';
//访问类方法:$变量名->方法名([参数]);
echo $obj->getSite();
3.4 self和$this
self
:引用当前类$this
:当前类的实例,伪对象,伪变量
—————————————————————————————————————————————————
4、构造方法
public function __construct([参数])
{
//成员初始化
$this->site = $site;//赋值
}
4.1 使用二个下划线开始命名的方法:魔术方法
4.2 不需要用户主动调用,总是在满足一定条件的时候,被自动调用/触发
4.3 构造方法:当前类被实例化的时候自动调用,new
4.4 可以将类成员的初始化或实例化时的自动操作放里面
5、类成员访问控制
5.1 public
,公共成员,在类内部、类外部和子类中都可以被访问
5.2 private
,私有成员,只能够在类内部被访问
5.3 protected
,受保护成员,能够类内部和子类中被访问
6、类的继承
class 类名 extends 父类名
{
//子类会将父类中所有满足访问条件的成员全部继承过来
}
6.1 通过parnet()::来访问父类的方法
7、Trait—-部分突破类的单继承限制
//trait类的声明,使用类的语法,但不是类,不能实例化
trait Test
{
pubilc function getInfor()
{
return;
}
}
7.1 相当于将trait中的代码直接复制到使用trait的类中,实现代码复用
7.2 trait类的声明,使用类的语法,但不是类,不能实例化
7.2 一般在父类中使用,尽量不在最底层的子类中使用
7.3 trait不能被实例化,只能通过use关键字来使用
7.4 优先级:当前类同名方法>trait同名方法>从父类继承的同名方法
演示代码
<?php
//trait--方法库
trait Driver
{
public function getDriver()
{
return '我是trait司机:' .$this->driver;
}
}
//1、创建类
class CompanyCar
{
//引用trait
use Driver;
//2、添加类成员
//创建属性
public $bus ='';
protected $manager ='';
//private $bosscar ='';
protected $driver ='';
//创建方法
public function user()
{
//实例化类
//$obj = new CompanyCar();
echo $this->bus .'<br>';
echo $this->manager .'<br>';
//echo $this->bosscar .'<br>';
echo $this->driver .'<br>';
}
//构造方法
public function __construct($bus, $manager, $driver)
{
$this->bus = $bus;
$this->manager = $manager;
//$this->bosscar = $bosscar;
$this->driver = $driver;
}
/*public function getDriver()
{
return '我是父类司机:' .$this->driver;
}*/
}
//继承
class BossCar extends CompanyCar
{
//在子类中重写父类方法、扩展
public function user()
{
//echo $this->bus .'<br>';
//parent:: ---访问父类中的成员
//::---范围解析符
echo parent::user() ."车牌:" .$this->carNo .'//这里可以扩展父类中的方法' .'<br>';
//echo $this->bosscar .'<br>';bosscar私有的,子类不不能访问
}
//创建只属于子类的属性
public $carNo = '';
public function __construct($bus, $manager, $driver, $carNo)
{
parent::__construct($bus, $manager, $driver);
$this->carNo = $carNo;
}
/*public function getDriver()
{
return '我是子类司机:' .$this->driver;
}*/
}
//3、访问类成员
//实例化类CompanyCar()
$obj = new CompanyCar('公司班车', '管理人员的车', 'alan');
//在类的内部访问类成员
echo $obj->user();
echo '<hr>';
//在类的外部访问类成员
echo $obj->bus .'//外部只有public修饰的能被访问';
echo '<hr>';
//实例化子类
$obj1 = new BossCar('KIA168', 'BENZ158', 'alan','YD1688888');
//访问子类类成员
echo $obj1->user();
echo '<hr>';
echo $obj1->getDriver();
echo '<hr>';