批改状态:合格
老师批语:
访问修饰符,有三个:
public 公用的
protected 受保护的,在外面不能直接访问
private 私有的
PHP的oop面向对象开发,它的三大特性:封装,继承,多态
require_once 加载,可以加载引入类使用
-创建类
class A{// 成员属性// 公开的,外部可以访问public $name;public $id = 123; // 给默认值// 受保护的,在外面不可以访问,但是可以继承protected $salary;// 私有的,只能本类(我)自己调用,子类都继承不了的private $password;// 构造方法,专门给受保护的属性,给与重新赋值,构造方法也是可以继承的public function __construct($a, $b, $c, $d){$this->name = $a;$this->id = $b;$this->salary = $c;$this->password = $d;}// 可以通过 __construct 方法里,把其他属性通过用户传过来public function bldy(){return "我的名字叫:{$this->name},我的id是:{$this->id},我的工资是:{$this->salary},我的密码是:{$this->password}";}// 方法在本类里调用 用 $this 代表本类和英文里的 my一个意思public function dy(){return $this->bh() . ',另外:' . $this->sy();}// 成员方法 可以公开的public function gk(){return '这里可以写很多代码,进行功能处理,和函数一样,也可以写返回的数据类型';}// 成员方法,受保护的protected function bh(){return '这个方法是受保护的,可以继承';}// 成员方法,私有的private function sy(){return '私有的,子类是继承不了的';}
require_once 'A.php'; // 引用创建的 A 类// 这个类创建出来,给不能访问的属性,添加默认值$obj = new A('晋阳', '123', '5000', '123456');echo $obj->name; // name 是公开的,所以可以输出echo '<hr>';echo $obj->id;echo '<hr>';echo $obj->salary; // 受保护的,在外部不能调用,所以报错echo '<hr>';echo $obj->password; // 私有的,只能自己使用,所以报错echo '<hr>';echo $obj->bldy(); // 受保护的和私有的在外部不能访问,但是可以自己调用出来echo '<hr>';echo $obj->dy(); // 在本类中可以用$this调用方法
传值的属性,是先传给子类,如果子类里面有构造方法先使用了它,它就优先用子类的构造方法,替换掉父类的构造方法
创建子类
require_once 'A.php';// B 类,继承 A类class B extends A{// 可以在父类的基础上进行扩展// public $age;// 可以重写构造方法,对属性进行重新赋值// public function __construct($age)// {// $this->age = $age;// }// 受保护的属性在子类里也可以调用,但是要在子类里面使用public function get_salary(){return '父类的工资是:' . $this->salary;}// 子类和父类都有 bldy 重复了,可以用 parent:: 调用父类的 bldypublic function bldy(){return parent::bldy() . ',这是从B类里传出来的';}}
blay在子类调用
spl_autoload_register(function ($className) {// $className 是new的B这个名字,这个名字是类名,不是文件名require_once $className . '.php';});
把 final 写在 class 前面那么这个类就不能被继承
不能继承
// final 写在 class前面这个类就不能被继承final class C{public $name;public $id;protected $salary;private $password;public function __construct($a, $b, $c, $d){$this->name = $a;$this->id = $b;$this->salary = $c;$this->password = $d;}// final 写在方法前面,那么这个方法就不能被修改final public function bldy(){return "我的名字叫:{$this->name},我的id是:{$this->id},我的密码是:{$this->password},我的工资有:{$this->salary}";}}
静态成员访问方式,用类名::属性名,类名::方法名()
一个类,不用实例就能使用里面的属性和方法.
静态成员由本类掉用,为所有实例共享
静态类
class Shop{// 静态属性public static $title;public $price;public $num1 = 1;public static $num2 = 2;public function __construct($t, $p){$this->title = $t;$this->price = $p;$this->num1++; // 普通变量,都是从头开始计算// self:: 代表静态成员的本类self::$num2++; // 静态成员,只要是调用了,就会增加1}// 静态方法public static function cartoon(){return '使用' . Shop::$title;}}
调用
Shop::$title = '苹果13Pro'; // 赋值echo Shop::$title;echo '<hr>';echo Shop::cartoon();echo '<hr>';echo Shop::$num2;
输出
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号