我有以下三个对象,包括以下方法和属性:
$obj1
- $prop1
- $prop2
- $prop3
- $prop4
- method1()
- method2()
- method3()
- method4()
$obj2
- $prop2
- $prop3
- $prop4
- $prop5
- method2()
- method3()
- method4()
- method5()
$obj3
- $prop1
- $prop3
- $prop4
- $prop5
- method1()
- method3()
- method4()
- method5()
给定名称的所有属性和方法都使用相同的脚本来创建它们。
创建这些对象的一个可能的脚本如下:
class class1 {
var $prop1=123, $prop2=array(), $prop3, $prop4;
public method method1($x) {echo('hello '.$x;}
public method method2($x) {echo('goodby '.$x;}
public method method3($x) {echo('hey '.$x;}
public method method4($x) {echo('seeya '.$x;}
}
class class2 {
var $prop2=array(), $prop3, $prop4, $prop5=555,;
public method method2($x) {echo('goodby '.$x;}
public method method3($x) {echo('hey '.$x;}
public method method4($x) {echo('seeya '.$x;}
public method method5($x) {echo('latter '.$x;}
}
class class3 {
var $prop1=123, $prop3, $prop4, $prop5=555,;
public method method1($x) {echo('hello '.$x;}
public method method3($x) {echo('hey '.$x;}
public method method4($x) {echo('seeya '.$x;}
public method method5($x) {echo('latter '.$x;}
}
如何在不复制用于创建属性和方法的脚本的情况下创建这三个对象?
答案 0 :(得分:2)
好像他们都使用方法4和3
因此,您只需要在一个类中定义方法,然后其他类可以扩展它。
其他方法可以由特征处理,但它有点乱,因为你需要每个方法都有一个特征
这同样适用于属性。
class class1 {
use Method1,Method2;
public method method3($x) {echo('hey '.$x;}
public method method4($x) {echo('seeya '.$x;}
}
class class2 extends class1{
use Method2,Method5;
}
class class3 extends class1{
use Method1,Method5;
}
trait Method1 {
public method method1($x) {echo('hello '.$x;}
}
trait Method2 {
public method method2($x) {echo('goodby '.$x;}
}
trait Method5 {
public method method5($x) {echo('latter '.$x;}
}
修改强>
我刚刚意识到所有的类都会以方法1和2结束,因为它们扩展了使用它们的class1,所以..我猜你最好将所有方法放在不同的特征中并用{添加它们{1}}根据需要而不用担心use
我仍然不太关心它,但
答案 1 :(得分:2)
未经测试且不肯定它会起作用。此外,担心这将难以维持。
trait trait_1{
var $prop1=123;
public method method1($x) {echo('hello '.$x;}
}
trait trait_2{
$prop2=array();
public method method2($x) {echo('goodby '.$x;}
}
trait trait_5{
$prop5=555;
public method method5($x) {echo('latter '.$x;}
}
trait trait_3_4{
var $prop3, $prop4;
public method method3($x) {echo('hey '.$x;}
public method method4($x) {echo('seeya '.$x;}
}
class class1 {
use trait_1, trait_2, trait_3_4;
}
class class2 {
use trait_2, trait_3_4, trait_5;
}
class class3 {
use trait_1, trait_3_4, trait_5;
}