Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Так не хватало множественного наследования в PHP.Не холивара ради, но многие с вами не согласятся.
class A {
public function hello();
}
class B {
public function hello2();
}
class Aggregator1 {
private $a;
private $b;
public function __construct() {
$this->a = new A();
$this->b = new B();
}
public function hello() {
$this->a->hello();
}
public function hello2() {
$this->b->hello2();
}
}
$test = new Aggregator1();
$test->hello();
$test->hello2();
class Aggregator2 {
public $a;
public $b;
public function __construct() {
$this->a = new A();
$this->b = new B();
}
}
$test = new Aggregator2();
$test->a->hello();
$test->b->hello2();
и ничего агрегация с делегированием не требует, не выдумывай.
class A {
public function aa() {
echo __METHOD__ . " called!\n";
}
}
class B {
public function bb() {
echo __METHOD__ . " called!\n";
}
}
class AggregateDelegate {
protected $_objects = array();
public function __construct() {
$args = func_get_args();
for ($i = 0, $s = sizeof( $args); $i < $s; $i++) {
if (!is_object( $args[$i])) {
throw new Exception( 'Invalid argument!');
}
$this->_objects[] = $args[$i];
}
}
public function __call( $name, $args) {
if (!method_exists( $this, $name)) {
for ($i = 0, $object; $object = $this->_objects[$i]; $i++) {
if (method_exists( $object, $name)) {
return call_user_func_array(
array( $object, $name),
$args
);
}
}
}
}
}
class C extends AggregateDelegate {
public function cc() {
echo __METHOD__ . " called!\n";
}
}
$c = new C( new A(), new B());
$c->aa();
$c->bb();
$c->cc();
class C extends AggregateDelegate {
public function __construct() {
parent::__construct( new A, new B);
}
public function cc() {
echo __METHOD__ . " called!\n";
}
}
$c = new C;
$c->aa();
$c->bb();
$c->cc();
Я бы не был столь категоричным
здесь было уже десятка три холиваров на тему «ООП в ПХП» и всегда сходится к одному мнению, что ооп в этом мусоре как пятая нога, ни реализации, ни применения./blockquote>
Не хочу никого оскорбить, но кто именно высказывал такое мнение? Этот человек/люди имеет опыт программирования на PHP? У него большой опыт программирования в целом? Кто конкретно развел холивар? Школота, купившая инвайт на Хабр за $25 и кричащая «Я — крутой профи», а другие — отстойные недоноски? Это мнение высказывалось аргументировано? Делались сравнения, обобщения, анализ? Или просто так — кинул в пустоту «PHP — гавно» и пошел дальше?
Особенно если учесть, что ооп себя оправдывает в проектах в десятки (а то и сотню) тысяч строк, а судя по современным проектам (стартапам, хе-хе!) таких насчитываются единицы.
То есть, мы говорим уже о том, что ООП вообще не нужен в небольших проектах?
Кстати, а что работа Facebook, Yahoo Bookmarks (Delicious) и Dailymotion на PHP вам недостаточно? Проекты, скажем так, не маленькие. Впрочем, я соглашусь, что сайтов действительно астрономического масштаба на PHP действительно не так уж много. Впрочем, их вообще в мире не так уж много, не так ли?
Почитайте эти холивары, там много чего интересного есть в плане статистики и выводов, которые люди делают. Не говоря о применении, уж реализацию обсосали со всех сторон. Там, в этих постах, и будет опровержение вашего вывода.
Если вы накидаете мне ссылок, я с удовольствием почитаю. Если, конечно, в этих ссылках не говносрач пустой, а какая-то более-менее взрослая дискуссия с аргументами или хотя бы ссылками на мнения уважаемых людей.
НИКОГДА не бывает узким местомОй, да шо вы говорите. Серьёзно?
/** interference (Яндекс.Словари — Перевод ABBYY Lingvo)
* 2. сексуальное домогательство, изнасилование
$this->_forward('some-action');
$this->getRequest()->setDispatched(true);
$request->setActionName($action)
->setDispatched(true);
setDispatched(true) — значит, что запрос был отправлен на диспечирезацию. Другими словами вызывая переход на новый экшн из некого контроллер-экшена, при этом устанавливая этот флаг в true — значит, что этот экшнн не будет включен в цикл дистпечеризации. query(){
cache:run();
query:parse();
log:log(database:query())
}
At Utah sometime after Nov 66 when, influenced by Sketchpad, Simula, the design for the ARPAnet, the Burroughs B5000, and my background in Biology and Mathematics, I thought of an architecture for programming. It was probably in 1967 when someone asked me what I was doing, and I said: «It's object-oriented programming».
I didn't like the way Simula I or Simula 67 did inheritance (though I thought Nygaard and Dahl were just tremendous thinkers and designers). So I decided to leave out inheritance as a built-in feature until I understood it better.
So I decided to leave out inheritance as a built-in feature until I understood it better..
ООП Практикум PHP5: эмуляция примесей (mixin) в языке