moxnatiyАвтор оригинала: demongloom
может создать отдельный класс, куда через copy-paste вставить необходимые методы?
440hz мне кажется, что klava всетаки хотел именно наследование, т.е. использовать определенные методы в родителях.интерфейсы?
class Aclass {
function a1(){...}
function a2(){...}
}
class Bclass {
function b1(){...}
function b2(){...}
}
class C extends A{
var $b=null;
function __construct( ){
$b= new Bclass();
}
...
function c1(){...
[b] $dd = $this->b->b1();[/b]
...
}
}
interface flyingStuff {
public function fly($destinaton);
}
abstract class flyer {
// pattern template method
protected final function doFly() {
try {
$this->onTakeOff();
$this->onLand();
} catch (Exception $e) {
$this->onCrash();
}
}
protected abstract function onTakeOff();
protected abstract function onLand();
protected abstract function onCrash();
}
class someClass extends flyer implements flyingStuff {
private $destinaton;
public function fly($destinaton) {
$this->destinaton = $destinaton;
$this->doFly();
}
protected function onTakeOff() {
echo "Taking Off...\n";
//throw new Exception();
}
protected function onLand() {
echo "Landing...\n";
}
protected function onCrash() {
echo "Congratulations, you are dead.\n";
}
}
function flyToMoscow(flyingStuff $fs) {
$fs->fly("Moscow");
}
$x = new someClass();
flyToMoscow($x);
Тогда, мне кажется лучше поступить как предложил Alexandre, толькоАвтор оригинала: demongloom
имелось в виду что требуется совместить методы 2х разных классов в одном.
class Aclass {
function a1(){...}
function a2(){...}
}
interface Biface {
function b1();
function b2();
}
class Bclass implements Biface {
function b1(){...}
function b2(){...}
}
class C extends Aclass, implements Biface {
var $b=null;
function __construct( ){
$b= new Bclass();
}
function b1(){ // delegate
return $this->b->b1();
}
function b2(){ // override
....
}
}
Это да, но придется написать враппер для этих функций. Вообще-то все зависит от задачи, на сколько потребуются сами классы А и В для наследования других классов, а не только в классе С. Где-то лучше применить и интерфейсы. А может лучше создать классы А, В и интерфейс С, промежуточный класс D и уже от него осуществлять наследование.и уж тем более не решают проблему private методов и атрибутов
Автор оригинала: 440hz
интерфейсы?