StalkerClasses
Новичок
Какие есть способы интегрировать в существующий класс методы и свойства из другого внешнего класса для последующего их использования при создании объекта?
class Main {
// Аннотоация для переменной
protected $var;
public function getVar(){
return $this->var;
}
public function setVar($val){
$this->var = $val;
}
}
class MainEx {
// Аннотоация для переменной
protected $var2;
}
User::extend(function($model) {
$model->hasOne['author'] = ['Author', 'key' => 'user_id'];
});
User::extend(function($model) {
$model->bindEvent('model.beforeSave', function() use ($model) {
// ...
});
});
Product::addDynamicMethod('foo', function () {
return 'bar';
});
$p = new Product();
$p->foo(); //'bar'
мне кажется, он дает юзерам настраивать всякое для классов. Тут этим не поможешь.странно что еще не начал активно использовать go-aop. Практически все его хотелки связанные с наследованием как раз реализуются через такую магию...
там можно все динамически настраивать через конфиги а не только через аннотации и любое извращение с наследованием будет работать (ну или практически любое).мне кажется, он дает юзерам настраивать всякое для классов. Тут этим не поможешь.
Вот что то вроде такого
Можно пожалуйста Ваш пример.@StalkerClasses а почему ты не хочешь использовать MainEx?
или какой смысл писать классы (типы обьектов) если они тебе мешают?
PHP: Closure::call - Manual
PHP is a popular general-purpose scripting language that powers everything from your blog to the most popular websites in the world.www.php.net
этого достичь хочешь?Можно пожалуйста Ваш пример.
interface B{
public function foo();
}
interface C{
public function bar();
}
class A implements B, C{
public function foo(){
return 'foo';
}
public function bar(){
return 'bar';
}
}
class D implemens B{
public function foo(){
return 'D foo';
}
}
class E implemens C{
public function bar(){
return 'C bar';
}
}
function x(B $b){
echo $b->foo();
}
function y(C $c){
echo $c->bar();
}
$a = new A();
x($a);
x(new D);
y($a);
y(new E);
этого достичь хочешь?
PHP:interface B{ public function foo(); } interface C{ public function bar(); } class A implements B, C{ public function foo(){ return 'foo'; } public function bar(){ return 'bar'; } } class D implemens B{ public function foo(){ return 'D foo'; } } class E implemens C{ public function bar(){ return 'C bar'; } } function x(B $b){ echo $b->foo(); } function y(C $c){ echo $c->bar(); } $a = new A(); x($a); x(new D); y($a); y(new E);
Это уже близко к теме.@StalkerClasses,
Ещё вот такой пример есть.
Хук ООП не друг или Динамическое автонаследование классов
Нет предела совершенству. Поэтому, какая бы хорошая и многофункциональная CMS не была, но у сторонних разработчиков всегда будет возникать необходимость ее надстроить, допилить, расширить каким-то...m.habr.com
Не совсем удачный, но логика работы понятна.