使用不同的共享方法和属性扩展PHP类

时间:2015-09-03 18:53:04

标签: php class oop

我有以下三个对象,包括以下方法和属性:

$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;}
}

如何在不复制用于创建属性和方法的脚本的情况下创建这三个对象?

2 个答案:

答案 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;
}