php - это че реально так ? (multiple constructors)

bav46

http://ordinarywebguy.wordpress.com/2008/01/31/multiple-cons...
через такую каку делать?

hwh2010

там весь язык через жопу
нельзя написать
arrayReturningFunction[0]

bav46

чето я уже начинаю задумываться а стоит ли что-то делать на пхп.

Maurog

а стоит ли что-то делать на пхп
мы можем дать однозначный ответ
ты только спроси

doublemother

В пхп вообще невозможна перегрузка функций, кроме как средствами func_get_args или магическими методами.

bav46

мы можем дать однозначный ответ
ты только спроси
:grin:
а стоит ли что-то делать на пхп ?

doublemother

Пхп действительно довольно неудобный во многом язык, однако ничего более удобного и прозрачного для веба я, увы, не видел.
К сожалению, чтобы не писать на пхп говнокод и начать творить магию, надо ограбить не одну сотню или даже тысячу корованов, людей, которые это осилили, можно пересчитать по пальцам, ибо в большинстве случаев люди либо не осиливают и привыкают к говнокоду, либо изначально со слишком большим отвращением смотрят на пхп.
Так что думай сам, хочешь ли ты этого.

bav46

так а такую штуку там реально сделать
class B
{
void F;
}
class A : B
{
override F
}
?

doublemother

override - это что?
Если просто "новая версия" функции, то оно по умолчанию так и есть. Ключевое слово final в базовой функции может запретить создание таковой.

bav46

так это я жуе рюхнул
следующая вещь
class B
{
private $_isi;
_constuctor(ISomeInterface g)
{
$self._isi = $g
}
}
class G : ISomeInterface
{
}
Засчет того что все динамически
конструкция new B(new G
приведет к тому что хост интерфейса будет сразу же раскрыт в _isi хочу жесткую типизацию при обращении к $_isi такое реально?

doublemother

Собственно виртуальных, как таковых в пхп нет, вернее сказать, они все являются виртуальными. Ты не сможешь сделать каст вида
A)$b)->someMethod;
Однако изнутри класса ты можешь сделать parent::callSomething;

doublemother

приведет к тому что хост интерфейса будет сразу же раскрыт в _isi хочу жесткую типизацию при обращении к $_isi такое реально?
Ничего не понял. Ты хочешь работать с $_isi как с интерфейсом, а не как с тем классом, которым он является? Нет, так нельзя, см. пост чуть выше. Можешь только проверять, что переменная реализует твой интерфейс, запрашивая is_a($this->_isi, "ISomeInterface") или is_subclass_of(...) с теми же параметрами.

bav46

да как с интерфейсом
вот ты мне скажи такую вещь, если на пхп писать что-нить большое и псевдо объектно ориентированное, сколько у команды будет ошибок?

hwh2010

если на пхп писать что-нить большое и псевдо объектно ориентированное, сколько у команды будет ошибок?
42

doublemother

Если команда только собирается изучать пхп или, скажем, это свежевыпустившиеся специалисты с ВМК, грезящие явой и высоким уровнем абстракций, то соберете все, нет, ВСЕ ошибки, которые только можно сделать. Например, практически гарантированно все разработчики начинают либо считать php чем-то вроде явы, городить сложную систему объектов, натыкаться на недоделанный ООП и испытывать глюки, тормоза и леденящий ужас, либо наоборот считают чем-то типа C, заводят стопицот global'ов (за которые надо отрывать руки) и опять же получают нечитаемый ужасный код.
То есть я рекомендовал бы писать то, что ты хочешь, на пхп, только если у вас есть хотя бы один человек, который писал на пхп большие проекты, умеет это делать и будет в необходимых местах больно бить всех остальных по рукам.

psm-home

 Мегаплан вон на PHP5 написан, наверняка в ОО стиле. На вид очень приличный продукт, немаленький и растет еще. На форуме вроде есть оттуда люди, может выскажутся, как оно, на PHP такие вещи делать.

bav46

либо считать php чем-то вроде явы, городить сложную систему объектов, натыкаться на недоделанный ООП и испытывать глюки
посоветуй отцовский код, с MVC на php, что лучше посмотреть как это делают правильно и быстро?

doublemother

MVC - это то, от чего я плююсь больше всего :)
У меня лежит сейчас на винте пхп-шные исходники одного очень-серьезного, прибыльного и очень посещаемого российского проекта, написанного полностью по фэншую с применением фреймворка onPHP. В этом проекте несколько тысяч .php файлов с разными классами, контроллерами, моделями, хелперами и прочей хренотой. Так что проекты, могу подтвердить, имеются. Как человек, вынужденный было залезать к ним в код, могу сказать, что поддерживать это невозможно и, по-моему, они сами уже не понимают, как это работает. И вообще со всей пролетарской ненавистью заявляю, что MVC и ORM придумали неполноценные люди.
А так всякие phpBB вроде бы юзают MVC, они вроде любят всё такое. Попробуй их посмотреть.

bav46

где ошибка? что-то я плохо понимаю как он с базовыми классами работает
 
<?php
class B implements IGet
{
public function get
{
$v = array(1, 2, 3);
return $v;
}
public function f1
{
new childA($this);
}
public function f
{
$rc = new ReflectionClass( "childA" );
$c = $rc->newInstance($this);
}

public static $_instance;

public static function getInstance
{
if( ! (self::$_instance instanceof self) )
{
self::$_instance = new self;
}
return self::$_instance;
}

private function __construct
{
}
}
interface IGet
{
public function get;
}

class A
{
public function __construct {
$argv = func_get_args ;
print_r ( $argv );
print "<br>";
print_r ( $argv [0]->get );
print "<br>";
}
}

class childA extends A
{
public function __construct
{
parent::__construct(func_get_args;
}
}

$b = B::getInstance;
echo "1<br/>";
$b->f;
echo "2<br/>";
$b->f1;

echo "3<br/>";
new childA($b)



?>

doublemother

		print_r ( $argv [0]->get  );

замени на
		print_r ( $argv [0][0]->get  );

Еще на конце new childA($b) точка с запятой.
А еще нафига у тебя инстанс публичный?

bav46

вот блин реально :grin:
пойдука я спать :grin:

bav46

а как передать чтобы во второй массив не убиралось ?

Fragaria

Мегаплан вон на PHP5 написан, наверняка в ОО стиле. На вид очень приличный продукт, немаленький и растет еще. На форуме вроде есть оттуда люди, может выскажутся, как оно, на PHP такие вещи делать.
В мегаплане есть свой удобный MVC-фреймворк и очень жесткие правила написания кода, касающиеся как codestyle, так и "правил хорошего тона". Так что писать достаточно удобно. Сейчас еще перейдем на версию 5.3, чтобы избавиться от костылей, связанных с отсутствием позднего статического связывания, и вообще норм будет :)
Но, конечно, хорошо писать на PHP умеют единицы, судя по тому, как сложно найти хороших программистов к нам в команду и сколькие потом не проходят испытательный срок.

Maurog

и очень жесткие правила написания кода
потом не проходят испытательный срок.
:shocked:

bav46

скока сейчас команда пхпшников у мегаплана?

Fragaria

Вообще нас вроде чуть меньше 30, но разные команды работают над разными проектами, сейчас над мегапланом вроде бы работают около 15 человек. За точность не ручаюсь, потому что в последнее время набрали несколько разработчиков, с которыми я еще даже не знаком.

doublemother

а как передать чтобы во второй массив не убиралось ?
class childA extends A
{
public function __construct
{
$args = func_get_args;
call_user_func_array(array(parent, '__construct' $args);
}
}
Оставить комментарий
Имя или ник:
Комментарий: