2009-10-01 2 views
0

Хотите знать, если это возможно в PHP земли:PHP Импорт внешнего класса в MyClass

Скажем, у меня есть класс следующим образом:

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

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

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

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

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

ответ

2

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

class myClass extends anotherClass { 
} 

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

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

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

+1

Ссылка показывает, что именно я хотел сделать. Читайте больше об этом. Благодарю. – safoo

+0

Это может сработать, но использование eval для достижения даже оправданного конца, как это, делает меня непринужденным. –

0

Если MyCLASS extends 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) 
} 
+0

Спасибо. Да, но я хочу избежать расширения класса 3500, поскольку он имеет 3490 строк функциональности, которые мне не нужны. В принципе, я хочу расширить только один метод. – safoo

2

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

 Смежные вопросы

  • Нет связанных вопросов^_^