
批改狀態(tài):合格
老師批語:trait可以將類中方法,進行更好的歸類與整理, 對用戶提供一個更加簡潔的接口
<?php
//1.先寫2個trait,使2個trait中有又相同的方法aaa
trait Demo1
{
public function aaa()
{
return __TRAIT__ . '***' . __METHOD__;
}
}
trait Demo2
{
public function aaa()
{
return __TRAIT__ . '---' . __METHOD__;
}
protected function nnn()
{
return __TRAIT__ . '+++' . __METHOD__;
}
}
//1.替代,用Demo1中的aaa替換Demo2中的aaa
class Demo3
{
use Demo1, Demo2{
Demo1::aaa insteadof Demo2;
}
}
$demo = new Demo3;
echo $demo->aaa() , '<hr>';
//2.別名,把Demo2中的aaa取一個別名,客戶端訪問別名
//使用這種方法也必須用第一個Demo1中的aaa替代Demo2中的aaa,否則會出錯
class Demo4
{
use Demo1, Demo2{
Demo1::aaa insteadof Demo2;
Demo2::aaa as bbb;
}
}
$demo = new Demo4;
echo $demo->bbb() , '<hr>';
//3.用as修改trait中成員的訪問控制
//把Demo2種的受保護的aaa修改成為公共的的訪問屬性
//用use+as修改trait中的成員的訪問控制的時候必須要修改發(fā)放的名稱
class Demo5
{
use Demo2{
nnn as public vvv;
}
}
$demo = new Demo5;
echo $demo->vvv() , '<hr>';
<?php
//1.先建立一個接口
//先判斷當天腳本中有沒有要建立的接口名稱,如果沒有再建立
if (!interface_exists('iUser')){
interface iUser
{
public function user();
}
}
//2.再建立一個抽象類
if (!class_exists('user1')){
abstract class user1
{
abstract protected function name();
}
}
//3.再建立一個trait,并且在trait中實現(xiàn)以上接口和抽象類中的方法
if (!trait_exists('user2')){
trait user2
{
public function user()
{
return '我的名字是';
}
public function name()
{
return '程東旭';
}
}
}
//4.在建立一個實現(xiàn)類,并且use以上trait
if (!class_exists('user3')){
class user3
{
use user2;
}
}
$user = new user3();
echo $user->user() . $user->name();
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號