LINUX.ORG.RU

PHP и функции с необязательными аргументами

 , ,


0

2

Допустим, есть функция

function func($a, $b, $c, $d=0, $e=1, $f='', $g=null)
{...}
Как ей передать параметры $a, $b, $c, $d и $g, без $e и $f?
Насколько помню, это делалось так:
func(1, $var, 6, 1, $g=$obj)
Но нет
Погуглил - ничего
Не работает и это:
func(1, $var, 6, $d=1, $g=$obj)
Как быть?

★★★★

Ответ на: комментарий от drBatty

а если какой-то огромный проект, то юзать php - нерационально.

Я не прав?

Ухахах. Кто понимает, убигают очень быстро от этой чумы среди ЯП. Но 95%, как всегда, решает.

anonymous ()
Ответ на: комментарий от alix

Это уже не ко мне вопрос, плачу им не я

ИМХО это уже не проблема ЯП. Для такого классы придумали, наследование, и вообще ООП. Что-бы костылять по ходу пьесы. Очевидно, что аффторы этого не знали. А в пхп оно вроде есть.

drBatty ★★ ()
Ответ на: комментарий от drBatty

И еще, как правило, жирные и сложные проекты стали такими не сразу, но метаться было уже поздно.

anonymous ()
Ответ на: комментарий от anonymous

Самое печальное, что в языке для веба (!!!) поддержка юникода сделана через жопу.

в _новом_ php (с 5.1 хотя-бы), utf-8 вроде как работает сносно. А если ты юзаешь ПО 2001го года, то зачем плачешь?

drBatty ★★ ()
Ответ на: комментарий от anonymous

Кто понимает, убигают очень быстро от этой чумы среди ЯП.

некоторые проекты и не должны быть очень большими.

И еще, как правило, жирные и сложные проекты стали такими не сразу, но метаться было уже поздно.

знаешь, но многие поделки станут намного лучше, если их переписать с нуля. Я не прав?

Но 95%, как всегда, решает.

в любом ремесле 95% ремесленников НЕ являются гениями. И что? Программирование как-то отличается?

drBatty ★★ ()
Ответ на: комментарий от drBatty

но многие поделки станут намного лучше, если их переписать с нуля. Я не прав?

Абсолютно не прав. Любое переписывание это потеря времени, которое можно потратить на фичи. Оно оправдано только в совсем клинических случаях.

Переписывание это удел школоло. Поддержка — занятие истых мужей.

anonymous ()
Ответ на: комментарий от drBatty

К сожалению, не всегда, остались хотя бы такие пережитки как разделение функций для 8битных кодировок и многобайтовых (i.e. unicode).

http://www.php.net/manual/ru/ref.mbstring.php

Мне до сихпор непонятно почему при переходе на 5.1 не заменили/объединили функционал для работы со строками.

rikardoac ()
Последнее исправление: rikardoac (всего исправлений: 1)
Ответ на: комментарий от drBatty

в _новом_ php (с 5.1 хотя-бы), utf-8 вроде как работает сносно.

A string is series of characters, where a character is the same as a byte. This means that PHP only supports a 256-character set, and hence does not offer native Unicode support.

Last updated: Fri, 17 May 2013

anonymous ()
Ответ на: комментарий от anonymous

Стаж, это когда ты принимаешь решение добавить оперативки на сервер, вместо того чтобы посмотреть свежим взглядом на проект и учтя недостатки, написать нормально?

rikardoac ()
Ответ на: комментарий от rikardoac

Стаж, это когда ты принимаешь решение добавить оперативки на сервер, вместо того чтобы посмотреть свежим взглядом на проект и учтя недостатки, написать нормально?

Опытный человек выбирает самое дешевое и сердитое решение. Чем опытнее — тем дешевле и сердитее. Иногда это тупо железо, да, иногда код, иногда постучать по голове админов.

Вариант «написать нормально» выбирают только щеглы (чего впрочем у них не получается) и когда пишешь для себя или форфан.

anonymous ()
Ответ на: комментарий от anonymous

Абсолютно не прав. Любое переписывание это потеря времени, которое можно потратить на фичи. Оно оправдано только в совсем клинических случаях.

а я НЕ ПОВЕРЮ, что СРАЗУ умеешь писать приложения, которые умеют масштабироваться до уровня фконтакта(по числу активных идиотов в секунду). Тем более на таком ЯП, как пхп.

Переписывание это удел школоло. Поддержка — занятие истых мужей.

вообще-то поддержка вовсе не исключает переписывания. Про рефакторинг слышал? Или это недостойно мужика?

drBatty ★★ ()
Ответ на: комментарий от anonymous

Опытный человек выбирает самое дешевое и сердитое решение. Чем опытнее — тем дешевле и сердитее.

ППКС. В моем случае стоимость определяется затратами моего времени

alix ★★★★ ()
Ответ на: комментарий от rikardoac

Мне до сихпор непонятно почему при переходе на 5.1 не заменили/объединили функционал для работы со строками.

дык РЕШЕТО получится. Из нашего любимого онтопика решета не получилось лишь потому, что IRL и перехода-то не было. Linux так до сих пор НЕ юникодный. Юникодно только пространство простого юзера, если оно есть, а система так до сих пор и считает, что «Ф» — два символа, можешь сам проверить. А вот в пхп этот вариант не пройдёт, ибо старые фильтры мгновенно превратятся в РЕШЕТО, которое может обойти любой школьник. Именно по этой причине, старые функции остались без изменений.

См. выше ( PHP и функции с необязательными аргументами (комментарий) ), присутствующие здесь специалисты переписывать код не желают, а готовы только добавлять фичи. Если ВНЕЗАПНО сделать поддержку утф8, то все их сайты(95%) превратяться в РЕШЕТО.

drBatty ★★ ()
Ответ на: комментарий от anonymous

A string is series of characters, where a character is the same as a byte. This means that PHP only supports a 256-character set, and hence does not offer native Unicode support.

причины: см. выше. ССЗБ.

drBatty ★★ ()
Ответ на: комментарий от drBatty

Если ВНЕЗАПНО сделать поддержку утф8, то все их сайты(95%) превратяться в РЕШЕТО.

То есть Вы думаете, что «присутствующие здесь специалисты» и отсутствующие здесь сторонние хостеры обновляют серверное ПО в продакшене до последней версии?

alix ★★★★ ()
Ответ на: комментарий от anonymous

Вариант «написать нормально» выбирают только щеглы

а вот с этим я не спорю. Вот только «дешёвое и сердитое» решение со временем становится непригодным, и требует ПОЛНОГО переписывания с нуля. Ибо поддерживать костылями устаревшие решения становится всё более уныло и дорого. Дешевле и сердитей переписать всё по новой.

drBatty ★★ ()
Ответ на: комментарий от alix

То есть Вы думаете, что «присутствующие здесь специалисты» и отсутствующие здесь сторонние хостеры обновляют серверное ПО в продакшене до последней версии?

вообще-то упомянутая мной 5.1 релизилась СЕМЬ лет назад. Пруф: http://php.net/releases/index.php

drBatty ★★ ()
Ответ на: комментарий от drBatty

а я НЕ ПОВЕРЮ, что СРАЗУ умеешь писать приложения, которые умеют масштабироваться до уровня фконтакта(по числу активных идиотов в секунду). Тем более на таком ЯП, как пхп.

Hint: нагрузка растет постепенно, и естественно правки имеют локальный характер. Чтобы приложение вообще не масштабировалось такое бывает только если разработчики совсем идиоты.

Под переписыванием я имею ввиду правки длящиеся больше трех ч/м. Они ведут в никуда, разговоры разработчиков о «лучшей архитектуре, позволяющей неограниченно масштабироваться, надо только немножко подождать когда будет готово» — просто буллшит. Таких эльфов надо выгонять вон, да где ж нормальных взять?

anonymous ()
Ответ на: комментарий от drBatty

Вот только «дешёвое и сердитое» решение со временем становится непригодным, и требует ПОЛНОГО переписывания с нуля

Вот когда станет «дешевле и сердитей» переписать с нуля, чем городить костыли, тогда наверное скажут переписывать.

alix ★★★★ ()
Ответ на: комментарий от drBatty

вообще-то упомянутая мной 5.1 релизилась СЕМЬ лет назад.

То, над чем я работаю, работает под PHP 5.3.5 и переходить на новую версию не собирается, я об этом. Так что «ВНЕЗАПНО» ничего точно не появится

alix ★★★★ ()
Ответ на: комментарий от drBatty

Дешевле и сердитей переписать всё по новой.

Это было бы верно, если переписанные версии не становились такими же неподдерживаемыми чмонстрами.

Слава богу в профессии достаточно техлидов, способных держать сложность на приемлемом уровне, даже для расплывшихся проектов на PHP, что и подтверждается кучей высоконагруженных сайтов.

anonymous ()
Ответ на: комментарий от anonymous

Hint: нагрузка растет постепенно, и естественно правки имеют локальный характер. Чтобы приложение вообще не масштабировалось такое бывает только если разработчики совсем идиоты.

только до определённого предела.

drBatty ★★ ()
Ответ на: комментарий от alix

Вот когда станет «дешевле и сердитей» переписать с нуля, чем городить костыли, тогда наверное скажут переписывать.

судя по твоим проблемам (из первого поста), такой момент уже близко. Вчера.

drBatty ★★ ()
Ответ на: комментарий от drBatty

только до определённого предела.

Ой, да ладно. Это обычная инженерия, никакого рокетсайнса здесь и в помине нет.

anonymous ()
Ответ на: комментарий от alix

То, над чем я работаю, работает под PHP 5.3.5 и переходить на новую версию не собирается, я об этом. Так что «ВНЕЗАПНО» ничего точно не появится

могу тебя расстроить: контролировать версию php получается только у админа локалхоста. Откуда правило: код должен быть переносимый. Чем лучше переносим, тем лучший код. (конечно слишком хорошо — нехорошо).

drBatty ★★ ()
Ответ на: комментарий от anonymous

Это было бы верно, если переписанные версии не становились такими же неподдерживаемыми чмонстрами.

ну… это же RL.

drBatty ★★ ()
Ответ на: комментарий от anonymous

Ой, да ладно. Это обычная инженерия, никакого рокетсайнса здесь и в помине нет.

не надо до маразма доводить.

drBatty ★★ ()
Ответ на: комментарий от drBatty

контролировать версию php получается только у админа локалхоста

Вот тут несогласен: если хостинг не сторонний, то получится.

Откуда правило: код должен быть переносимый. Чем лучше переносим, тем лучший код.

А тут согласен

alix ★★★★ ()
Ответ на: комментарий от alix

контролировать версию php получается только у админа локалхоста

Вот тут несогласен: если хостинг не сторонний, то получится.

угу. Получится тогда, и только тогда, когда на этом хостинге ВСЕ скрипты требуют ОДНУ версию, причём именно ЭТА версия поддерживается маинтейнером дистра (IRL такое только в localhost'е бывает, да и то, лишь в Slackware, которую ты сам поддерживаешь. Да, ещё есть РЕШЕТО, которое никто не обновляет)

И не забывай, это тебе НЕ сишечка, сегодня у тебя годный пхп, а завтра он ВНЕЗАПНО объявлен негодным. Т.е. нагуглить решение и вставить не получится, надо ещё документацию почитать, про deprecated, ибо нагуглишь ты старое решение, и оно наверняка устарело, и даже если сегодня ещё работает, то завтра сломается.

drBatty ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.