PHP Импорт Иностранного Класса 'Метод в MyClass - PullRequest
0 голосов
/ 01 октября 2009

Хотите знать, если это возможно в PHP Land:

Допустим, у меня есть следующий класс:

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

и другой класс:

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

«AnotherClass» имеет длину 3500 строк, и я просто хочу использовать единственный метод «addFive» в myClass.

  • Есть ли способ импортировать функцию и вызывать ее в моем классе, а $ this будет ссылаться на объект myClass?
  • Это хорошая / плохая практика?
  • (необязательно) Как это работает в Python? (Просто любопытно, когда я начинаю изучать Python)

Ответы [ 3 ]

2 голосов
/ 01 октября 2009

Лучше было бы переместить сложный метод в его собственный класс. Затем оба ваших класса могут создать его экземпляр, передать все необходимые данные и вызвать метод.

2 голосов
/ 01 октября 2009

Самый простой способ сделать это - расширить один класс на другой

class myClass extends anotherClass {
}

Класс myClass теперь имеет доступ ко всем методам другого класса, которые являются открытыми или защищенными.

Если вы хотите, чтобы у класса был только один метод другого, или нецелесообразно, чтобы один класс расширялся от другого, в PHP нет ничего встроенного, что позволило бы вам это сделать. Концепция, которую вы ищете в Google, - это «Mixin», как и в функциональности Mix In одного класса с другим. Есть статья или две о некоторых шаблонах, которые вы можете попробовать реализовать в PHP, но сам я никогда не пробовал.

Хорошая идея / Плохая идея? После того, как вы освоите технику, она станет удобной и полезной, но она будет стоить вам производительности и затруднит для новичка уловку того, что вы делаете с вашим кодом, особенно (но не ограничиваясь этим) того, кто менее знаком с концепциями ОО.

0 голосов
/ 01 октября 2009

Если ваш myClass расширяет 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)
}
...