manyrus, фабрика нужна для других задач. Когда нужно заменять один объект другим прямо в процессе выполнения.
Эти объекты не могут заменять друг друга, у них разные интерфейсы и разные сущности.
По поводу передачи параметра $type - его нужно представить в виде константы. Потому что ты можешь:
1) забыть, как ты назвал круг, Circle, circle или Round вообще.
2) забыть, сколько фигур предусмотрено вообще, какие есть.
3) опечататься.
Константу удобно объявить в самой фабрике, раз уж она статична. Тогда IDE тебе всё подскажет и не нужно будет лезть в код смотреть, и опечаток не будет 100%.
OZ_, как раз здесь его можно использовать. У нас везде один и тот же интерфейс. Тем более фабрика делегирует созданием объектов наследников родительского класса. А вот про константы, это уже дело вкуса
.
manyrus, когда используется фабрика, клиент (тот, кто получает объект) не беспокоится, каким именно объектом будет результат.
В твоём случае клиенту будет пофиг, круг ему вернули, квадрат или треугольник. Может так и будет, конечно, но слишком уж различны эти сущности
Хотя да, интерфейс одинаков.
А про $type - это дело хороших привычек, а не вкуса
Я описал преимущества, а пользоваться ими или нет - решай сам, конечно.
Даны целые числа а1, …., аn. Все члены последовательности с четными номерами,
предшествующие первому по порядку члену со значением max(а1, …., аn),
домножить на max(а1, …., аn), и упорядочить по невозрастанию оставшуюся часть
массива. Программу составить для произвольного целого числа n, заданного в виде
константы.
Задача: одной строчкой программного кода используя preg_replace() нужно сделать замену фрагмента {RESULT} на сумму цифр "6924", которая идет в последнем контейнере div после фрагмента edit\.
Цифры в фрагменте "edit\6924" могут быть разные от 1 до 100000000
<div class="edit\5451" style="width:100%; text-align:left">
<div style="padding:0px 25px 0px 25px" align="left" class="edit\9874">
<div class="edit\6924" style="padding:0px 0px 6px 0px">
<div id="result">{RESULT}</div>
Пример выполнения скрипта:
<div class="edit\5451" style="width:100%; text-align:left">
<div style="padding:0px 25px 0px 25px" align="left" class="edit\9874">
<div class="edit\6924" style="padding:0px 0px 6px 0px">
<div id="result">21</div>
$r = "html задачи";
echo preg_replace("#(.*)(edit\\\)([0-9]+)(.*)(\{RESULT\})(.*)#si","$1$2$3$4$3$6",$r);
cudlesig, впринципе да, но нужно заменить на "сумму цифер" и учесть что именно в блоке div ето действо
20 Янв 2011, 5:14M0rbid,
$a=preg_replace('#(\<div\s+class\="edit\\\)(\d+)(".*\>\s+\<div.+\>)\{RESULT\}#U','\1\2\3\2',$a);
а как суммировать хз
если ток через callback