
批改狀態(tài):合格
老師批語:
<?php
// class聲明一個類
class User
{
// 受保護的屬性:可以在當前類與擴展類使用
protected $name;
protected $email;
// 構(gòu)造方法
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
// 類的靜態(tài)成員
class Shop
{
// 靜態(tài)屬性
protected static $name;
private static $price;
// 構(gòu)造方法
public function __construct($name,$price)
{
self::$name = $name;
self::$price = $price;
}
// 靜態(tài)方法
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;
// 重寫父類構(gòu)造器
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語法實現(xiàn)、但不是類,所以不能實例化
父類可以實例化
trait特征:類使用use關鍵字、實現(xiàn)代碼復用特征類中的方法。
父類:父類使用extends擴展父類,實現(xiàn)代碼復用父類中的方法。
類同時擴展父類,又使用trait特征類,同名方法優(yōu)先級:類自身中的方法 > trait > 擴展的父類
<?php
trait Shop
{
public function s1()
{
return 'Hello,World!';
}
}
// trait的類,使用use關鍵字引用
class A
{
use Shop;
}
echo (new A)->s1(),'<br>';
echo '<hr>';
// trait的沖突與優(yōu)先級的解決方案
trait A1
{
public function order()
{
return 'PHP中文網(wǎng)';
}
}
trait A2
{
public function order()
{
return ' : php.cn';
}
}
class B
{
use A1,A2{
// 1.優(yōu)先級
A1::order insteadOf A2;
// 2.別名
A2::order as orders;
}
}
echo (new B)->order(),(new B)->orders(),'<hr>';
?>
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號