类声明与实例化、类的静态成员与类的扩展、trait与父类区别联系、trait冲突与优先级解决方案
16lz
2021-02-04
1.类声明与实例化
<?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>';
?>
2.类的静态成员与类的扩展
<?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>';
?>
3.trait功能与trait父类的区别与联系、并实例演示trait冲突与优先级解决方案
trait特征:理解为一个公共方法集、借用class语法实现、但不是类,所以不能实例化
父类可以实例化
trait特征:类使用use关键字、实现代码复用特征类中的方法。
父类:父类使用extends扩展父类,实现代码复用父类中的方法。
类同时扩展父类,又使用trait特征类,同名方法优先级:类自身中的方法 > trait > 扩展的父类
<?php
trait 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 '';
}
}
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>';
?>
更多相关文章
- 接口和抽象类的实现-区别与联系
- PHP类声明|类的实例化|类的静态成员|类的扩展|trait与父类关联|t
- PHP面向对象编程
- 0202-类声明及类的实例化,静态成员与类的扩展,trait与父类的区别
- 类声明-实例化-成员-继承-trait特征类
- Java基础知识点1
- 全面演示: 函数的作用域与闭包,回调的使用场景以及函数的多值返
- [计算机视觉论文速递] 2018-03-14
- [计算机视觉论文速递] 2018-03-16