批改状态:合格
老师批语:
面向对象 oop
面向过程编程:直接面向变量和函数的的编程
oop:直接面向对象编程(封装了变量和函数的一个编程单元)
本质是封装目标是代码复用
类:对象的模板,声明的类与这个类所在的文件推荐同名
class Product{// 属性:变量public $name;public $age;// 方法:函数// 双下划线的方法:魔术方法,由系统自动调用// 类实例化的时候会调用它//构造方法public function __construct($name,$age){//初始化类成员,让类/实例化状态确定下来// 1、生成类的实例// $obj=new Product;//2、给这个新类赋值属性//$this:当前类实例的引用$this->name=$name;$this->age=$age;//3、返回这个新对象// return $obj}//实例方法public function index():string{return "$this->name:$this->age";}}
运行结果图
//加载类文件require 'product.php';//new 类实例化$obj=new Product('name',18);var_dump($obj);//两个对象完全对立,却是同一个类的实例$obj1=new Product('user',22);var_dump($obj1);echo $obj->index(),'<br>';echo $obj1->index();

在客户端脚本中
//类的自动加载器spl_autoload_register(function($class){require $class.'.php';});
require 'load.php';// 实例化$obj=new Product('类',18);var_dump($obj);
运行结果图

在客户端脚本中
class User{public static $name;public static $age;public function __construct($name,$age){//静态成员与实例无关,当然不能使用$this访问,用类的引用//self:当前类的引用self::$name=$name;self::$age=$age;}public static function show(){return self::$name.self::$age;}}
运行结果图
$ob=new User('姓名',18);echo User::$name,'<br>';echo User::$age,'<br>';echo User::show(),'<br>';echo $ob->show();

继承 extends ,子类,实现类的复用
1、对父类方法的重写
2、对父类功能的扩充
创建子类Sub
require 'load.php';class Sub extends Product{public $sex;public function __construct($name,$age,$sex){// $this->name=$name;// $this->age=$age;parent::__construct($name,$age);$this->sex=$sex;}public function index():string{return parent::index()."$this->sex";}}
在客户端脚本中
$obj2=new Sub('姓名',35,'男');var_dump($obj2);
运行结果图
效果图
trait T{public function m(){return __METHOD__;}}class A{use T;}class B{use T;}echo (new A)->m(),'<br>';echo (new B)->m(),'<br>';

trait T1{public function m(){return __METHOD__;}}trait T2{public function m(){return __METHOD__;}}class A{use T1,T2{T1::m insteadOf T2;T2::m as T2m;}}echo (new A)->m(),'<br>';echo (new A)->T2m(),'<br>';

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号