PHP中特性的详细说明

PHP中特性的详细说明
PHP是丹继成的语言,在PHP 5.4性状的出现,PHP类不能继承的属性方法从两个基类同时。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(){
Echo 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
特质你好{
公共函数hello(){
你好,特性;
}
}
班班{
使用你好{
你好,受保护
}
}
班班{
使用你好{
你好:你好,你好,你好;
}
}
obj1 =新一级(美元);
($ obj1 ->你好);#致命错误报告,因为喂法进行了改进,保护
$ obj2 =新班();
$ obj2 ->你好(你好);#方法仍然是原来的公共
($ obj2 ->嗨);#致命错误报告,因为别名HI方法修改为私人
特性还可以结合特性,而特性支持抽象方法、静态属性和静态方法,测试代码如下所示:
< PHP
特质你好{
公共函数sayHello(){
你好;
}
}
特点世界{
使用你好;
公共函数表示世界(){
回声世界;
}
摘要公共功能getworld();
公共功能公司(){
静态$ = 0;
$ = $ 1;

}
公共静态函数doSomething(){
做某事;
}
}
class HelloWorld {
使用世界;
公共功能getworld(){
return'get世界;
}
}
$ obj =新的HelloWorld();
$ obj -> sayHello();
$ obj ->表示世界();
echo $ obj -> getworld()。;
HelloWorld::doSomething();
$ obj ->公司();
$ obj ->公司();
输出结果如下:
你好
世界
得到世界
做某事


以上是本文的全部内容,希望能对大家有所帮助。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部