[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: function, передать первый и третий аргумент
inpost
function aaa ($a = 1,$b=2,$c=3){...}
Вызываю:
aaa($a,$c);
Как правильно сделать вызов, чтобы передался только первый и третий аргумент, а второй стал по правилам самой функции, если не передался аргумент: $b=2.



Спустя 6 минут, 13 секунд (12.11.2010 - 21:05) kovaldm написал(а):
Определить функцию так

function aaa($a, $b = 2, $c)
{
...
}

Спустя 13 минут (12.11.2010 - 21:18) inpost написал(а):
kovaldm
Это не выход.
function addTextarea($name='text',$cols=70,$rows=10,$value='')
{
echo "<br><textarea name=\"".$name."\" id=\"mess\" cols=\"".$cols."\" rows=\"".$rows."\">".$value."</textarea><br>";
}
addTextarea(); // вывод стандартную textarea,
addTextarea($name,$value); // я хочу передать только name и value, чтобы $cols и $rows остались такими, какие они записаны.
addTextarea(,,,$value); // передать только value, в таком стиле, только как записать правильно, чтобы работало?


Внутри функции проверка - не выход тоже...

Спустя 3 минуты, 52 секунды (12.11.2010 - 21:22) twin написал(а):
Массивом.

Спустя 45 секунд (12.11.2010 - 21:23) linker написал(а):
К сожалению просто логически порассуждав, понимаешь что так сделать - нельзя! Необязательные параметры всегда идут в конце и никогда не чередуются с обязательными. Запомните это.

twin
Говнокод какой-то получится, массивом. Не надо давать явно г. советы.

Спустя 28 минут, 1 секунда (12.11.2010 - 21:51) inpost написал(а):
Массив - выход, можно сделать проверку внутри, если параметр пустой - присвоить стандартные параметры.
function addTextarea($name,$cols,$rows,$value)
{
if(empty($name))
$name = 'text';
if(empty($cols))
$name = 70;
if(empty($rows))
$name = 10;
if(empty($value))
$name = '';
echo "<br><textarea name=\"".$name."\" id=\"mess\" cols=\"".$cols."\" rows=\"".$rows."\">".$value."</textarea><br>";
}
addTextarea('beer','','','beeeeeeeeer!!!');


linker
А чем же в данном случае массив плох?
addTextarea($array = array('beer','','','beeeeeeer!!!'));

Спустя 2 минуты, 34 секунды (12.11.2010 - 21:53) twin написал(а):
linker
Говняная сама задумка писать подобного рода фреймворки.
Ну а говняные задумки решаются (как и во всех говняных фреймворках) только говняными способами. :)

function addTextarea($arr = array('name'=>'', 'id'=>'mess', 'cols'=>70, 'rows'=>10, 'value'=>''))
{
return '<br><textarea name="'. (!empty($arr['name'])? $arr['name'] : 'text') .'"'
. ' id="'. (!empty($arr['id'])? $arr['id'] : 'mess') .'"'
. ' cols="'. (!empty($arr['cols'])? $arr['cols'] : '70') .'"'
. ' rows="'. (!empty($arr['cols'])? $arr['cols'] : '10') .'">'
. (!empty($arr['value'])? $arr['value'] : '') .'</textarea><br>';
}

$textarea = array(
'name' => $name,
'id' => '',
'cols' => '',
'rows' => '',
'value'=> $name
);

echo addTextarea();
echo addTextarea($textarea);

Спустя 1 минута, 24 секунды (12.11.2010 - 21:55) Nikitian написал(а):
inpost
Не такой массив выход :)

function name($input){
$default=array(
'param1'=>'value',
'param2'=>'value',
'param3'=>'value',
'param4'=>'value',
'param5'=>'value'
);
foreach($default as $k=>$v)if(!isset($input[$k]))
$input[$k]=$v;
}

Спустя 6 минут, 20 секунд (12.11.2010 - 22:01) linker написал(а):
В топку, лучше не давать подобных советов, вместо того чтобы учить людей говнокодить.

Спустя 5 минут, 16 секунд (12.11.2010 - 22:06) inpost написал(а):
Обычный textarea с бб-кодами, в функции идет вывод его. Ввёл addTextarea() - вывелось поле в админке. Допустим имя - это бред, но редактировать размеры порой приходится: addTextarea(50,50).
Если данный способ подключать такой редактор плох, то как по другому?

Спустя 2 минуты, 26 секунд (12.11.2010 - 22:09) Guest написал(а):
smile.gif
Его же не отговорить. Ну еще на одного говнокодера, который думает, что генерить элементы скриптом изобретателя фреймворка больше... Пусть развлекается. Сам потом поймет, что это говнокод от задумки до реализации.

Спустя 40 секунд (12.11.2010 - 22:09) kirik написал(а):
3 выхода нормальных:
- передавать вторым аргументом значение, которое стопроцентно не может передать сам скрипт (если туда передается только строка или false - передать null итп.)
- если второй аргумент принимает только строку, а третьий аргумент - какой-нибудь флаг, то если вторым аргументом передан флаг - считать его третьим
- если третьий аргумент принимает только булевые значения, поставить ему как значение по-умолчанию например null и если третьим аргументом пришел null - значит считать второй арг. как третьий.

UPD в какой-то функции php-шной использовался третьий вариант, вспомню-покажу..

Спустя 1 минута, 29 секунд (12.11.2010 - 22:11) kovaldm написал(а):
inpost, а ты определи в функции массив с дефолтными аргументами, и смотри чего передалось, а чего нет и соответственно заменяй, дефолтные значения переданными.

Спустя 11 часов, 39 минут, 22 секунды (13.11.2010 - 09:50) linker написал(а):
Цитата
если второй аргумент принимает только строку, а третьий аргумент - какой-нибудь флаг, то если вторым аргументом передан флаг - считать его третьим
Интересно, а какими средствами и методами собираетесь определять что передано !!именно!! значение флага, а не что-то логически иное, но совпадающее по фактическому значению?

Все это слишком ограниченно и говнокодисто.

Спустя 57 минут, 5 секунд (13.11.2010 - 10:47) kirik написал(а):
Цитата (linker @ 13.11.2010 - 01:50)
Интересно, а какими средствами и методами собираетесь определять что передано !!именно!! значение флага, а не что-то логически иное, но совпадающее по фактическому значению?

Именно по этому нужно передавать то, что !!никогда!! не пересечется с реальными данными. Например один из очень маловероятных вариантов - логарифм нуля ( log(0) ).

Цитата (linker @ 13.11.2010 - 01:50)
Все это слишком ограниченно и говнокодисто.

Не спорю smile.gif Есть задача - есть решение.

Спустя 6 минут, 2 секунды (13.11.2010 - 10:53) Семён написал(а):
С каких пор передавать массив в функцию стало признаком говнокода?! mad.gif

Спустя 1 час, 11 минут, 9 секунд (13.11.2010 - 12:05) linker написал(а):
kirik
В нетипизированном языке PHP передать можно все что угодно.

Семён
Передать массив как аргумент - не говнокод, говнокод это когда массив используется как подмена обычного метода аргументирования вызова функции, метода. Если вам не видно разницы - сочувствую.

Спустя 3 минуты, 56 секунд (13.11.2010 - 12:09) Семён написал(а):
Цитата (linker @ 13.11.2010 - 13:05)
kirik
В нетипизированном языке PHP передать можно все что угодно.

Семён
Передать массив как аргумент - не говнокод, говнокод это когда массив используется как подмена обычного метода аргументирования вызова функции, метода. Если вам не видно разницы - сочувствую.

Сочувствие оставь себе.
Я вижу что twin написал "Массивом", а ты развонялся, что это говнокод.

Спустя 21 минута, 11 секунд (13.11.2010 - 12:30) linker написал(а):
Ты можешь видеть все что угодно, вот суть понять важнее имхо. Давайте будем вместо вызова myfunction($a, $b); использовать call_user_func('myfunction', $a, $b); а фигли. Решение может и быть, но вот является ли оно настолько правильным и стоит ли советовать подобное решение? Можно, но хотя бы предупредить человека о его говнокодистости со всеми вытекающими последствиями - это правильно.

Спустя 2 минуты, 50 секунд (13.11.2010 - 12:33) Семён написал(а):
Цитата (linker @ 13.11.2010 - 13:30)
Можно, но хотя бы предупредить человека о его говнокодистости со всеми вытекающими последствиями - это правильно.

С этим не спорю.

Спустя 2 часа, 28 минут, 52 секунды (13.11.2010 - 15:01) Nikitian написал(а):
linker
Какова ваша альтернатива передаче нескольких необязательных параметров?
Пример задачи: функция загрузки данных по web. Возможные параметры: uri, timeout, method, fields (post, get), proxy, headers.... Загромождать входные параметры этим а потом при необходимости что-то из этого указать, писать кучу null (причём где-то null будет корректным значением)?

Спустя 6 часов, 38 минут, 44 секунды (13.11.2010 - 21:40) kirik написал(а):
Цитата (kirik @ 12.11.2010 - 14:09)
UPD в какой-то функции php-шной использовался третьий вариант, вспомню-покажу..

Нашел вот pg_query() - первый аргумент можно опустить.

Цитата (linker @ 13.11.2010 - 04:05)
В нетипизированном языке PHP передать можно все что угодно.

Да чтож такое-то.. Как только заходит вопрос о том, что в PHP можно что-то сделать чего не получится адекватно воспроизвести в других языках (типизированных), так сразу в ответ отмазка типа твоей. Его нетипизированность вполне оправдана его сферой использования.
А если хочешь отказаться от этого плюса - вперед.

Спустя 2 часа, 13 минут, 21 секунда (13.11.2010 - 23:54) twin написал(а):
+1
обожаю php именно за нетипизированность данных.
Это конечно не делает чести мне, но язык тут причем.
Неортогональность != говнокодинг.
kirik правильно заметил. Есть задача => есть решение.

Ну а от постановки задачи и способ реализации. Не думаю, что ТС не сделает выводов. Он далеко не идиот.

Спустя 16 часов, 14 минут, 40 секунд (14.11.2010 - 16:08) linker написал(а):
kirik
И тут же читаем ниже Although connection can be omitted, it is not recommended, since it can be the cause of hard to find bugs in scripts.

twin
Почитай мой пост, про замену стандартного вызова функций через call_user_func() - неортогонально, но в случае "просто хочу так, а не как положено" - говнокодисто.

Лучше согласится таки с разрабами PHP
Note that when using default arguments, any defaults should be on the right side of any non-default arguments; otherwise, things will not work as expected

Спустя 4 часа, 32 минуты, 53 секунды (14.11.2010 - 20:41) kirik написал(а):
Цитата (linker @ 14.11.2010 - 08:08)
kirik
И тут же читаем ниже Although connection can be omitted, it is not recommended, since it can be the cause of hard to find bugs in scripts.

Я пример привел.

Цитата (linker @ 14.11.2010 - 08:08)
Лучше согласится таки с разрабами PHP
Note that when using default arguments, any defaults should be on the right side of any non-default arguments; otherwise, things will not work as expected

linker, так никто и не спорит! Не ясно зачем ты тут до сих пор это доказываешь..

Спустя 2 часа, 8 минут, 3 секунды (14.11.2010 - 22:49) waldicom написал(а):
Эта ветка чемпион по использованию слов с корнем "говно". Это навернео потому что все такие ниипацца очень крутые прогеры?


_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.