PHP 导入外部类的方法到 MyClass

0 投票
3 回答
958 浏览
提问于 2025-04-15 14:43

想知道在PHP中是否可以这样做:

假设我有一个类,内容如下:

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

还有另一个类:

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

这个“另一个类”有3500行代码,我只想用里面的一个“addFive”方法在我的类中。

  • 有没有办法让我导入这个方法,然后在我的类中调用它,并且让$this指向我的类对象?
  • 这样做是好习惯还是坏习惯?
  • (可选)在Python中是怎么做的?(我只是好奇,因为我刚开始学习Python)

3 个回答

0

如果你的 myClass 是从 anotherClass 继承的,也就是说它是 anotherClass 的子类,那么 myClass 就会拥有 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)
}
2

一个更好的方法是把这个复杂的功能放到一个单独的类里。这样,你的两个类都可以创建这个新类的实例,传入需要的数据,然后调用这个功能。

2

最简单的方法就是让一个类继承另一个类。

class myClass extends anotherClass {
}

现在,myClass类可以使用另一个类(anotherClass)中所有公共或受保护的方法。

如果你只想让这个类拥有另一个类的一个方法,或者让一个类继承另一个类不太实际,那么PHP里没有内置的功能可以做到这一点。你可以在网上搜索“Mixin”,意思是把一个类的功能混合到另一个类里。有一些文章介绍了一些可以在PHP中实现这种功能的模式,但我自己从来没有尝试过。

这是个好主意还是坏主意?一旦你掌握了这种技巧,它会很方便也很有用,但会影响性能,并且让新手更难理解你代码的意思,尤其是对那些不太熟悉面向对象概念的人来说。

撰写回答