类的封装与继承
//类包括成员属性和成员方法
//访问修饰符:
// public 公用的 内部 子类 外部
// protected 受保护的 内 部 子类 可以继承
// private 私有的 内 部
// OPP面向对象开发,三大特性:封装 继承 多态
class Teacher
{
// 成员属性
public $name;
public $age;
public $gender;
protected $salary;
private $former;
//构造方法 给与重新赋值
public function __construct($name,$age=18,$gender=1,$salary=3000,$former=0)
{
$this->name=$name;
$this->age=$age;
$this->gender=$gender;
$this->salary=$salary;
$this->former=$former;
}
// 成员方法
public function info(){
return "我的名字:{$this->name},年龄:{$this->age},工资:{$this->salary},对象:{$this->former}";
// 受保护的或私有的可以在共有的方法里调用,用this
// return $this->jiaoan();
// return $this->silu();
}
public function code(){
return '我会写代码';
}
public function teaching(){
}
//受保护的 不能在外部访问
protected function jiaoan(){
return '我写的教案';
}
private function silu(){
return '这是我的教学思路';
}
}
$obj = new Teacher('xiaoming');
echo $obj ->name; //xiaoming 共有的直接访问
echo '<hr>';
//echo $obj ->salay; //受保护的,报错
//echo $obj ->former; 私有的,也无法直接访问
echo $obj ->code();//我会写代码
echo '<hr>';
echo $obj ->info(); // 我的名字:xiaoming,年龄:18,工资:3000,对象:0
echo '<hr>';
class Boy extends teacher{
//子类继承父类,可以直接使用父类的功能 extends
public function get_tea(){
return '父类工资:' . $this->salary;
}
}
//继承 只能继承公共的和受保护的,不能继承私有的
$obj = new Boy('花花');
//echo $obj ->former; 私有无法继承
//echo $obj ->salay; 受保护的不能在外部调用
echo $obj ->get_tea(); //父类工资:3000 受保护的可以在子类调用
<?php
// 自动加载 spl_autoload_register 文件名和类名保持一致
spl_autoload_register(function ($className){
require_once $className . '.php';
});
类的重写和静态成员
//只能有一个父类,但是可以有多个子类
class Girl extends Teacher{
// 类重新(方法重写)
//和父类方法名冲突,会覆盖父类
// public function info(){
// return "my name is:{$this->name}";
// }
// 属性可以和构造方法一起重写,属性单独无法重新
public $name;
public function __construct($name)
{
$this->name=$name;
}
//调用父类info() , parent::
public function info(){
return parent::info() . 'Girl调用父类的info';
}
}
// 父类禁止重写final
final public function info(){
return "我的名字:{$this->name},年龄:{$this->age},工资:{$this->salary},对象:{$this->former}";
}
// 子类只能改名来调用父类
public function info_s(){
return parent::info() . 'Girl调用父类的info';
}
final class Teacher{
}
该类禁止继承
<?php
//静态成员可以给变量也可以给方法
class Shop{
public static $title='苹果13PRO';
public $price;
public $num1=1;
public static $num2=1;
//构造 给与静态成员默认值会报错
//使用静态成员没有经过构造方法
public function __construct($title,$price)
{
$this->title =$title;
$this->price =$price;
// 普通成员变量,每次从头开始计算
$this->num1++;
// 静态变量成员调用一次,就会增加1
// 静态成员为本类调用,为所有实例共享
// 存在内存中,只要使用了改变了它的值,它会在内存中保存改变后的数据
self::$num2++;
}
public static function vedio(){
// 静态成员用self 代表本类 Shop, 普通方法用$this
return '看视频手机:'. self::$title;
}
}
//如果属性和方法是静态的不要使用原始的访问方法,防止浪费资源
//静态成员访问方式使用 类名::属性名 方法 类名::方法名
echo Shop::$title; //默认给值后,返回 苹果13PRO
echo '<hr>';
//不实例没有对象情况下也可以使用静态成员
Shop::$title='苹果 14 PRO';//也可以外面给与默认值
echo Shop::$title;
echo '<hr>';
echo Shop::vedio();