PHP中特性用法的详细介绍
< PHP
特征驱动{
公共carname美元= 'trait;
公共函数驱动(){
回声驱动{美元-> carname } ;
}
}
类人{
公共功能吃(){
回声吃;
}
}
班级学生延伸人{
使用驱动;
公共职能研究(){
研究;
}
}
学生=新学生();
学生(学习);
学生-吃饭();
学生>驾驶();
>
输出结果如下:
书房
吃
驱动特性
在上面的例子中,继承人学生上课的吃法,并结合驱动,有驱动方法和属性carname。
如果在特性、基类和这个类中有相同属性的一些属性或方法,那么最终保留哪一个属性或方法
< PHP
特征驱动{
公共函数hello(){
hello;
}
公共函数驱动(){
从驱动器驱动;
}
}
类人{
公共函数hello(){
你好;
}
公共函数驱动(){
从人身上开车;
}
}
班级学生延伸人{
使用驱动;
公共函数hello(){
你好学生;
}
}
学生=新学生();
学生-您好();
学生>驾驶();
>
输出结果如下:
你好生
开车从驱动
因此,得出的结论是,当方法或属性名称相同时,当前类中的方法将覆盖特征方法,而特征方法覆盖基类中的方法。
如果要组合多个特性,则特征名称用逗号分隔:
使用trait1,trait2;
如果不止一个特性包含相同的名称方法或属性,该怎么办答案是,当多个特性的组合包含相同的名称属性或方法时,需要明确声明以解决冲突,否则将产生致命错误。
< PHP
性状trait1 {
公共函数hello(){
回声trait1::您好;
}
公共函数HI(){
回声trait1::hi;
}
}
性状trait2 {
公共函数hello(){
回声trait2::您好;
}
公共函数HI(){
回声trait2::hi;
}
}
班班{
使用trait1,trait2;
}
>
输出结果如下:
复制代码代码如下所示:
PHP致命错误:特性方法hello未被应用,因为,因为错误:20。
使用而不是作为运营商解决冲突,而不是使用一个方法来代替其他。方法是为方法提取别名。
< PHP
性状trait1 {
公共函数hello(){
回声trait1::您好;
}
公共函数HI(){
回声trait1::hi;
}
}
性状trait2 {
公共函数hello(){
回声trait2::您好;
}
公共函数HI(){
回声trait2::hi;
}
}
班班{
使用trait1,trait2 {
trait2::你好,而不是trait1;
trait1::嗨,不是trait2;
}
}
班班{
使用trait1,trait2 {
trait2::你好,而不是trait1;
trait1::嗨,不是trait2;
trait2::喜为喜;
trait1::大家呵呵;
}
}
obj1 =新一级(美元);
obj1美元->你好();
obj1美元->嗨();
;
$ obj2 =新班();
$ obj2 ->你好();
$ obj2 ->嗨();
$ obj2 ->黑();
$ obj2 ->呵呵();
>
输出结果如下:
trait2::你好
trait1::你好
trait2::你好
trait1::你好
trait2::你好
trait1::你好
AS关键字对修改该方法的访问控制还有另一个用途:
特性还可以结合特性,而特性支持抽象方法、静态属性和静态方法,测试代码如下所示:
< PHP
Trait Hello {
公共函数sayHello(){
你好;
}
}
特点世界{
使用你好;
公共函数表示世界(){
回声世界;
}
摘要公共功能getworld();
公共功能公司(){
静态$ = 0;
$ = $ 1;
;
}
公共静态函数doSomething(){
做某事;
}
}
class HelloWorld {
使用世界;
公共功能getworld(){
return'get世界;
}
}
$ obj =新的HelloWorld();
$ obj -> sayHello();
$ obj ->表示世界();
echo $ obj -> getworld()。;
HelloWorld::doSomething();
$ obj ->公司();
$ obj ->公司();
>
输出结果如下:
你好
世界
得到世界
做某事
一
二
以上是本文的全部内容,希望能对您有所帮助,希望大家多多支持。