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 的控制权限的问题。

 

 

相关文章
|
监控 网络协议 API
阿里云BssOpenAPI是一个基于阿里云开放API的服务
【2月更文挑战第24天】阿里云BssOpenAPI是一个基于阿里云开放API的服务
525 6
|
自然语言处理 数据安全/隐私保护 开发者
应用在苹果App Store 怎么上架以及审批
关于应用怎么在苹果App Store 中上架以及审批,想必很多开发者都已经了解,但为了方便,ASO100总结出了相关流程,以供参考。
x3d
|
运维 程序员 云计算
PaaS 应用引擎
这里主要是梳理一下应用引擎(XXXX App Engine),它一般被归类到PaaS领域。应用引擎即提供了各种编程语言开发的应用所需的一整套运行环境;它开箱即用,你只需部署应用的代码即可,无需前期的环境搭建,也无需后期的运维,其它事情都交给AppEngine。
x3d
3559 0
|
Windows
How To Find User's SIDs in windows
How To Find User's SIDs in windows   1. Run command: wmic useraccount get name,sid 2.
745 0
sprintf详细用法
转摘声明:选自《CSDN 社区电子杂志——C/C++杂志》  来源:http://www.cnblogs.com/wqlblogger/archive/2007/01/09/615525.html 函数功能:   把格式化的数据写入某个字符串缓冲区。
828 0
|
4天前
|
人工智能 运维 安全
|
2天前
|
人工智能 异构计算
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!