批改状态:合格
老师批语:

<?php// class声明一个类class User{// 受保护的属性:可以在当前类与扩展类使用protected $name;protected $email;// 构造方法public function __construct($name,$email){$this->name = $name;$this->email = $email;}// 公开方法public function show(){return "$this->name : $this->email";}}// new实例化$obj = new User('张三','guest@qq.com');echo $obj->show(),'<br>';?>

<?php// 类的静态成员class Shop{// 静态属性protected static $name;private static $price;// 构造方法public function __construct($name,$price){self::$name = $name;self::$price = $price;}// 静态方法public static function show(){return sprintf('商品名:%s<br>价格:%d',self::$name,self::$price);}}$shop = new Shop('电脑',9999);echo Shop::show(),'<br>';echo '<hr>';// 子类的扩展class Order extends Shop{// 属性扩展private static $orderid;// 重写父类构造器public function __construct($name,$price,$orderid){parent::__construct($name,$price);self::$orderid = $orderid;}// 重写父类普通方法public static function show():string{return parent::show() . "<br>订单号:". self::$orderid;}}$orderid = new Order('小米',3989,123456789);echo Order::show(),'<br>';?>
trait特征:理解为一个公共方法集、借用class语法实现、但不是类,所以不能实例化
父类可以实例化
trait特征:类使用use关键字、实现代码复用特征类中的方法。
父类:父类使用extends扩展父类,实现代码复用父类中的方法。
类同时扩展父类,又使用trait特征类,同名方法优先级:类自身中的方法 > trait > 扩展的父类

<?phptrait Shop{public function s1(){return 'Hello,World!';}}// trait的类,使用use关键字引用class A{use Shop;}echo (new A)->s1(),'<br>';echo '<hr>';// trait的冲突与优先级的解决方案trait A1{public function order(){return 'PHP中文网';}}trait A2{public function order(){return ' : php.cn';}}class B{use A1,A2{// 1.优先级A1::order insteadOf A2;// 2.别名A2::order as orders;}}echo (new B)->order(),(new B)->orders(),'<hr>';?>
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号