PHP导入外部类的方法到MyClass

时间:2009-10-01 18:24:26

标签: php python oop closures anonymous-methods

想知道这是否可以在PHP Land中使用:

假设我有一个课程如下:

class myClass{
  var $myVar;
    ...
  myMethod(){
      $this->myVar = 10;
  }
}

和另一个班级:

class anotherClass {
   ...
   addFive(){
       $this->myVar += 5;
   }
}

'anotherClass'是3500行,我只想在myClass中使用单个'addFive'方法。

  • 有没有办法可以导入函数并能在我的类中调用它,$ this会引用myClass对象?
  • 这是好/坏的做法吗?
  • (可选)这在Python中是如何工作的? (只是好奇,因为我开始学习Python)

3 个答案:

答案 0 :(得分:2)

更好的方法是将复杂方法移动到自己的类中。然后你的两个类都可以实例化它,传递任何必要的数据,然后调用方法。

答案 1 :(得分:2)

最简单的方法是让一个类扩展另一个

class myClass extends anotherClass {
}

myClass类现在可以访问另一个公共或受保护的anotherClass方法。

如果你只希望该类具有另一个的一个方法,或者让一个类从另一个类扩展是不切实际的,那么PHP中没有任何内容可以让你这样做。你正在寻找谷歌的概念是“Mixin”,就像在Mix中一个类的功能与另一个类。在PHP中可以尝试实现此功能的某些模式有article or two,但我自己从未尝试过。

好主意/坏主意?一旦你掌握了这项技术,它既方便又有用,但会降低你的性能并使新手更难以理解你正在使用的代码,特别是(但不限于)不太熟悉OO概念的人。

答案 2 :(得分:0)

如果你的myClass extends anotherClass它继承了anotherClass的所有方法和属性(标记为private的那些方法和属性除外)。

class AnotherClass {
  protected $myVar;
  public function addFive(){
    $this->myVar += 5;
  }
}

class MyClass extends AnotherClass {
  public function __construct() {
    $this->myVar = 0;
  }

  public function myMethod(){
    $this->myVar = 10;
  }
}

$m = new MyClass;
$m->myMethod();
$m->addFive();
var_dump($m);

打印

object(MyClass)#1 (1) {
  ["myVar":protected]=>
  int(15)
}