批改状态:合格
老师批语:
/*** 1. 类文件名称与类名称一样* 2. 变量是实现数据的复用,函数是实现了代码块的复用* 3. 类是具有相同属性和方法的对象的集合* 4. 对象 是复合数据类型* 5. oop 单位是对象,对象是类实例化的结果*/
// ! 1. 类 与 对象class User{// 成员属性,一定要有访问修饰符// ! 2. OOP封装性/*** public: 公共的(类外可以访问)* private: 私有的(只能本类访问)* property:受保护的(仅对本类和子类访问,类外无法访问)* 构成OOP封装性(继承、多态)*/public string $name; // 定义增加类型,private int $salary;protected int $age;// 魔术方法 必须是公有的,为系统所调用,用户不能直接调用// __set __get _call __callStatic// ! 3 构造器// 特殊的成员方法 __construct// 用途:创建实例化出事状态,属性赋值(私有属性),调用方法public function __construct($name,$salary,$age){// 代表本对象$this->name = $name;$this->salary = $salary;$this->age = $age;}// 成员方法:public function say(){return $this->name . '会说话,他现在的工资是' . $this->salary;}}// 实例化//$james = new User();$james = new User('Jordan', 10000, 18);//var_dump($james);// 给对象属性赋值$james->name = 'Jordan';// 对象属性访问: ->echo "<pre>";echo $james->name;

// 属性拦截器 重载// 访问当前环境下不存在 或者不可见的成员时,会被自动调用// 原始属性value不会因此而改变public function __get($name){$res = 0;if($name === 'salary'){$res = $this->$name - 5000;}else{$res = $this->$name;}return $res;}// 未当前环境下不存在,或者不可见的成员赋值时,会被自动调用// 原始属性value会根据而改变public function __set($name, $value){if($name === 'salary'){$this->$name += $value;} else {$this->$name = $value;}}
//实例化$james = new User();// 对象属性访问: ->echo "<pre>";echo $james->name . '<br />';echo $james->salary. '<br />'; //5000 __getvar_dump($james); // 10000$james->salary = 2000; // __setecho $james->salary. '<br />'; // 7000var_dump($james); // 12000

// ! 4. 魔术方法 __call()// 方法重载public function __call($name, $args){if($name == 'hello'){return <<<DATA$this->name:工资($this->salary)对象($this->age)DATA;}if ($name == 'sum') {return array_sum($args);}}
//实例化$james = new User();// 方法:echo $james->say() . '<br />';echo $james->hello() . '<br />';echo call_user_func([$james, 'sum'],10,20,30) . '<br />';echo call_user_func_array([$james,'sum'],[10,20,30]);

<?php// 类的自动加载器spl_autoload_register(function ($className) {//var_dump($className);$classFile = __DIR__ . DIRECTORY_SEPARATOR . 'class' . DIRECTORY_SEPARATOR . $className . '.php';if(is_file($classFile) && file_exists($classFile))require $classFile;});
<?php// 客户端代码// 引入类的自动加载器require __DIR__ . DIRECTORY_SEPARATOR . 'autoload.php';/*require __DIR__ . DIRECTORY_SEPARATOR . 'class' . DIRECTORY_SEPARATOR . 'Product.php';require __DIR__ . DIRECTORY_SEPARATOR . 'class' . DIRECTORY_SEPARATOR . 'User.php';*/echo "<pre>";$i = new Product("iphone 14 pm", 9999, 12);echo $i->show() . "<pre>";$u = new User("peter",12000,12);echo $u->say();

<?phpclass Product{public string $name;protected float $price;protected int $num;public function __construct($name, $price, $num){$this->name = $name;$this->price = $price;$this->num = $num;}// 普通方法public function show(){return <<<SHOW1.品名:$this->name2.价格:$this->price3.属性:$this->numSHOW;}}
<?php// 类的继承 扩展 extends// Son 继承 Productclass Son extends Product{// 扩展父类属性public string $brand;public function __construct($name, $price, $num, $brand){// 扩展父类功能// parent::调用父类成员// self:: 类的引用,静态成员的访问parent::__construct($name, $price, $num);$this->brand = $brand;}// 重写 出现再成绩上下文里public function show(){return parent::show() . <<<SON4.品牌:$this->brandSON;}// 扩展功能public function total(){return "$this->name,数量为{$this->num},总计:" . ($this->price * $this->num) . "元";}}

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