0

想知道这在 PHP Land 中是否可行:

假设我有一堂课如下:

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

和另一个类:

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

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

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

3 回答 3

2

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

于 2009-10-01T18:33:06.493 回答
2

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

class myClass extends anotherClass {
}

myClass 类现在可以访问 anotherClass 的所有公共或受保护方法。

如果您只希望该类具有另一个类的一种方法,或者让一个类从另一个类扩展是不切实际的,那么 PHP 中没有内置任何东西可以让您这样做。您在 Google 中寻找的概念是“混合”,如将一个类的功能与另一个类混合。有一两篇文章介绍了您可以尝试在 PHP 中实现此功能的一些模式,但我自己从未尝试过。

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

于 2009-10-01T18:41:57.630 回答
0

如果您的 myClass扩展anotherClass 它会继承 anotherClass 的所有方法和属性(标记为私有的除外)。

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)
}
于 2009-10-01T18:29:38.730 回答