Trait 控制权|学习笔记

简介: 快速学习 Trait 控制权,本节课学习 trait 的控制权,类可以从 trait 里面把元素引入进来用。用的过程中想要对它进行控制不需要修改 trait 里面的源代码。可以通过 trait 里面的控制权来实现。本节目标是了解 trait 在进行别名控制权的规定,控制权的使用(修改访问修饰限定符)

开发者学堂课程【PHP 进阶教程-由浅入深掌握面向对象开发-第二阶段:Trait 控制权】学习笔记,与课程紧密联系,让用户快速学习知识。  

课程地址:https://developer.aliyun.com/learning/course/712/detail/12703


Trait 控制权


主要内容

一、概念

二、步骤

三、示例

四、小结


一、概念

trait 控制权:trait 在引入类后,可以根据实际类的需求修改 trait 中对应方法的控制权。(只针对当前引入类)其他的类引入是修改不了的,除非修改 trait 本身。

1、通过 AS 关键字直接修改权限

图片1.png 

例如现在已经有 trait 了,定义了 trait 的方法名。在类里面引入 trait 的名字的时候,如果只引入了单个,就直接方法名 as 访问修饰限定符。

2、通过别名的方式也可以实现权限的改变。

图片2.png

还是同样的代码放进去,但是想要改一个名字。改名字可以使用访问修饰限定符。但是这个针对的只是别名,说明原来的方法名是可以用的。原来的方法名,原来的访问修饰限定符是没有改变的。


二、具体步骤

1、定义 trait 设定方法

2、在类里面引入 trait

3、如果有必要,修改权限

直接修改权限是针对方法的修改

使用别名针对别名的权限修改,当前的方法本身依然是保留的

以上就是权限的特点。


三、示例

1、直接修改权限,改成其他的级别就可以了。

例如将公开改为私有,将私有改为共有。

图片3.png

将上述代码复制

10trait-power.php

#trait 控制权、、首先定义了 trait

private function pee{}

Echo “t1::pee”//一个是公有,一个是私有。在 trait 里面。

想要将 sleep 变成私有的,直接修改,然后将 pee 变成公有的。

发现上述部分内容需要改为私有。要访问在里面访问。$this-pee

在内部提供一个公有方式实现上述的私有修改,改成私有之后就不允许别人直接调用了,但是用户自己还是可以调用的。在调用之前可以做权限逻辑的各种判定。所以要保证安全。

$H=NEW-human。

此时 $H 只调用了自己的方法,show 方法,看看代码能否运行。

修改语法错误之后重新刷新,发现两个都可以调用。

图片4.png

因为在类内部,体现不出来任何的性质。

#调用原始方法

$H sleep(原来是公有的看看能否调用)

刷新之后发现不行。告诉我的方法是私有的,所以不行。

图片5.png

说明私有修改是成功,让他不能在外面访问。所以这个是错误的。

#已经完成私有化,不能外部调用。

$H-pee 可以运行,因为上面代码已经变成公有了。公有意味着就可以在外部访问。代码中有公有的方法,public function pee 所以可以在外部调用。以上就是权限的修改,直接修改。

2、通过别名修改:本质只限定了别名,没有改变原来的方式

将 sleep 改成别名之后

Class animal

Use t1{

Sleep as private s

Pee as public p

t1 中有 sleep 和 pee 这两种方法。把 sleep as 一个别名,但是改为私有化的 s。将 pee as 公开的 pee 方法。

此时这个两个方法就相当于将黑白颠倒一次。

颠倒之后直接来访问。

$a=new animal

$a->s()

刷新之后出现 s 方法是一个私有的方法,不能在外部调用。说明这个别名的方法已经私有化了,不能调用了。

#别名方法已完成私有化,不能调用

不能调用可以使用别的方法:

$a->sleep()

也就证明了别名修改不会将原有的方法撤换,相当于一种复制。原来是什么内容就是什么内容。不会撤换也就意味着原有访问修饰限定符都不会受任何牵连。

现在的 p 肯定是可以外部调用的。

$a->p()

因为这是公开的,相当于将其共用化了,就可以调用了。但是想要调用原来的p方法,它是私有的,是不能调用的。

以上就是通过别名的方法进行权限的修改。性质:改了别名不影响原来的方法或者控制权。


四、小结:

1、trait 提供的方法是可以被类引入之后根据实际需求修改控制权的,这种控制权没有要求的修改规范,不需要越来越严格或越来越开放。严格和开放可以随意切换

2、解决的方法有两种,直接对原始的方法修改权限。

第二种使用别名修改权限。别名控制权只会修改到别名本身的方法,原 trait、其他的是不会受到影响的。

图片6.png

上图是刚刚测试的结果。

说明 trait 适合真的想控制权限,适合使用单 trait 引入,不出现同名的情况。多trait 也可以,只要不重名。如果真的想修改权限,使用第一种直接修改权限,这样才会保证外部用不到原来的内容,这样才会有帮助。

以上是 trait 的控制权限的问题。

 

 

相关文章
sprintf详细用法
转摘声明:选自《CSDN 社区电子杂志——C/C++杂志》  来源:http://www.cnblogs.com/wqlblogger/archive/2007/01/09/615525.html 函数功能:   把格式化的数据写入某个字符串缓冲区。
835 0
|
6天前
|
存储 弹性计算 人工智能
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
2025年9月24日,阿里云弹性计算团队多位产品、技术专家及服务器团队技术专家共同在【2025云栖大会】现场带来了《通用计算产品发布与行业实践》的专场论坛,本论坛聚焦弹性计算多款通用算力产品发布。同时,ECS云服务器安全能力、资源售卖模式、计算AI助手等用户体验关键环节也宣布升级,让用云更简单、更智能。海尔三翼鸟云服务负责人刘建锋先生作为特邀嘉宾,莅临现场分享了关于阿里云ECS g9i推动AIoT平台的场景落地实践。
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
|
5天前
|
云安全 人工智能 自然语言处理
阿里云x硅基流动:AI安全护栏助力构建可信模型生态
阿里云AI安全护栏:大模型的“智能过滤系统”。
|
5天前
|
人工智能 自然语言处理 自动驾驶
关于举办首届全国大学生“启真问智”人工智能模型&智能体大赛决赛的通知
关于举办首届全国大学生“启真问智”人工智能模型&智能体大赛决赛的通知
|
Linux 虚拟化 iOS开发
VMware Workstation Pro 25H2 for Windows & Linux - 领先的免费桌面虚拟化软件
VMware Workstation Pro 25H2 for Windows & Linux - 领先的免费桌面虚拟化软件
1080 4
|
8天前
|
存储 机器学习/深度学习 人工智能
大模型微调技术:LoRA原理与实践
本文深入解析大语言模型微调中的关键技术——低秩自适应(LoRA)。通过分析全参数微调的计算瓶颈,详细阐述LoRA的数学原理、实现机制和优势特点。文章包含完整的PyTorch实现代码、性能对比实验以及实际应用场景,为开发者提供高效微调大模型的实践指南。
681 2
|
6天前
|
编解码 自然语言处理 文字识别
Qwen3-VL再添丁!4B/8B Dense模型开源,更轻量,仍强大
凌晨,Qwen3-VL系列再添新成员——Dense架构的Qwen3-VL-8B、Qwen3-VL-4B 模型,本地部署友好,并完整保留了Qwen3-VL的全部表现,评测指标表现优秀。
511 7
Qwen3-VL再添丁!4B/8B Dense模型开源,更轻量,仍强大
|
7天前
|
JavaScript API 开发工具
如何在原生App中调用Uniapp的原生功能?
如何在原生App中调用Uniapp的原生功能?
331 139