数码资讯
PHP中代码重用的特性实现
在php5.4,性状可实现代码重用机制。特性类似于类,但没有继承就不能实例化。它只需要被引入到使用类使用中。 (1)性状的简单利用 < PHP 特质{ 公共'test1 var1 =美元; 公共函数test1(){ echo'trait::test1(); } } 性状B { 公共'test2 va
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
在php5.4,性状可实现代码重用机制。特性类似于类,但没有继承就不能实例化。它只需要被引入到使用类使用中。
(1)性状的简单利用
< PHP
特质{
公共'test1 var1 =美元;
公共函数test1(){
echo'trait::test1();
}
}
性状B {
公共'test2 var2 =美元;
公共职能test2(){
echo'trait B::test2();
}
}
C类{
使用A,B;
}
新的C();
echo $ C -> var1; / /试验
$ C -> test2(); / /特质B:test2()
(2)优先问题
该特性将覆盖继承的方法,当前类重写特征方法。
特质{
公共$ var1 =测试;
公共功能测试(){
echo'a::测试();
}
公共函数test1(){
echo'a::test1();
}
}
B类{
公共功能测试(){
echo'b::测试();
}
公共函数test1(){
echo'b::test1();
}
}
类C扩展B {
使用;
公共功能测试(){
echo'c::测试();
}
}
新的C();
测试()
$ C -> test1(); / /::test1()
(3)多性状冲突问题
如果冲突没有解决,就会产生致命的错误。
而不是可以用来显式地使用冲突的方法;
AS运算符用于命名冲突方法之一;
特质{
公共功能测试(){
echo'a::测试();
}
}
性状B {
公共功能测试(){
echo'b::测试();
}
}
C类{
使用A,B,{
B::试验来代替;
B::测试为t;
}
}
新的C();
测试()
可以使用以下方式命名
(4)可以用来修改方法访问控制
特质的HelloWorld {
公共函数sayHello(){
echo'hello世界!;
}
}
修改sayHello / /访问控制
类{
使用HelloWorld {sayHello保护;}
}
对已更改的访问控制别名的方法
原来打招呼 / /访问控制是不可改变的
B类{
使用HelloWorld {sayHello私人myprivatehello;}
}
美元=新的A();
$ B -> sayHello(); / /致命错误:调用受保护的方法sayHello()::从语境
(5)特质使用特质。
特质{
公共函数test1(){
echo'test1;
}
}
性状B {
公共职能test2(){
echo'test2;
}
}
特质C {
使用A,B;
}
D类{
使用C;
}
d =新的d();
美元D -> test2(); / / test2
(6)特征支持抽象方法,支持静态方法,不能直接定义静态变量,但静态变量可以用特征方法来引用。
特质{
公共函数test1(){
静态$ = 0;
美元+;
回声$;
}
摘要公共功能(个); / /定义抽象方法
}
B类{
使用;
公共职能test2(){
}
}
新的b();
$ B -> test1(); / / 1
$ B -> test1(); / / 2
(7)特性可以定义属性,但不能在类中定义相同的名称属性。
特质{
公众1美元;
}
B类{
使用;
公共测试2美元;
}
(1)性状的简单利用
< PHP
特质{
公共'test1 var1 =美元;
公共函数test1(){
echo'trait::test1();
}
}
性状B {
公共'test2 var2 =美元;
公共职能test2(){
echo'trait B::test2();
}
}
C类{
使用A,B;
}
新的C();
echo $ C -> var1; / /试验
$ C -> test2(); / /特质B:test2()
(2)优先问题
该特性将覆盖继承的方法,当前类重写特征方法。
特质{
公共$ var1 =测试;
公共功能测试(){
echo'a::测试();
}
公共函数test1(){
echo'a::test1();
}
}
B类{
公共功能测试(){
echo'b::测试();
}
公共函数test1(){
echo'b::test1();
}
}
类C扩展B {
使用;
公共功能测试(){
echo'c::测试();
}
}
新的C();
测试()
$ C -> test1(); / /::test1()
(3)多性状冲突问题
如果冲突没有解决,就会产生致命的错误。
而不是可以用来显式地使用冲突的方法;
AS运算符用于命名冲突方法之一;
特质{
公共功能测试(){
echo'a::测试();
}
}
性状B {
公共功能测试(){
echo'b::测试();
}
}
C类{
使用A,B,{
B::试验来代替;
B::测试为t;
}
}
新的C();
测试()
可以使用以下方式命名
(4)可以用来修改方法访问控制
特质的HelloWorld {
公共函数sayHello(){
echo'hello世界!;
}
}
修改sayHello / /访问控制
类{
使用HelloWorld {sayHello保护;}
}
对已更改的访问控制别名的方法
原来打招呼 / /访问控制是不可改变的
B类{
使用HelloWorld {sayHello私人myprivatehello;}
}
美元=新的A();
$ B -> sayHello(); / /致命错误:调用受保护的方法sayHello()::从语境
(5)特质使用特质。
特质{
公共函数test1(){
echo'test1;
}
}
性状B {
公共职能test2(){
echo'test2;
}
}
特质C {
使用A,B;
}
D类{
使用C;
}
d =新的d();
美元D -> test2(); / / test2
(6)特征支持抽象方法,支持静态方法,不能直接定义静态变量,但静态变量可以用特征方法来引用。
特质{
公共函数test1(){
静态$ = 0;
美元+;
回声$;
}
摘要公共功能(个); / /定义抽象方法
}
B类{
使用;
公共职能test2(){
}
}
新的b();
$ B -> test1(); / / 1
$ B -> test1(); / / 2
(7)特性可以定义属性,但不能在类中定义相同的名称属性。
特质{
公众1美元;
}
B类{
使用;
公共测试2美元;
}
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。