2009-08-07 3 views
0

Причина, по которой я задаю этот вопрос, заключается в том, что я приземлился на свою первую реальную (да, оплачиваемую офисную работу - больше не волонтерство!) Работа в области веб-разработки около двух месяцев назад. У меня есть несколько партнеров в компьютерных информационных системах (веб-разработка и программирование). Но, как многие из вас знают, то, что вы изучаете в колледже, и что вам нужно на рабочем месте, может быть совсем другим и намного более. Я определенно учился на своей работе - я воссоздал всю инфраструктуру, которую мы используем с нуля в архитектуре MVC, - впервые выполнив все, что связано с шаблонами проектирования.Лучший способ передачи/возврата значений

Мне было интересно, что вы рекомендовали бы как лучший способ передать/вернуть значения в OO PHP? Прямо сейчас я не применяю какой-либо стандарт, но я бы хотел создать его до того, как размер рамки больше будет расти. Я возвращаю массивы, когда более 1 значения должны возвращаться, а иногда и массивы или имеют несколько параметров. Является ли массив наилучшим способом или есть более эффективный метод, такой как json? Мне нравится идея массивов в том, чтобы передавать больше значений или меньше, вам просто нужно изменить массив, а не само определение функции.

Спасибо всем, просто пытаюсь стать лучшим разработчиком.

EDIT: Мне очень жаль, я думал, что принял ответ на этот вопрос. Мой плохой, очень, очень плохой.

+2

Немного от темы. Но если есть некоторая важная потребность в программировании вашей собственной структуры, почему бы вам просто не использовать поддерживаемое сообщество? Большинство мышления уже сделано для вас таким образом. – Mark

+0

Требования к заданию - мы не хотели слишком сильно зависеть от других сторон нашего кода - особенно основного ингредиента каждого проекта, который мы делаем. Что-то происходит с одной из этих прекрасных фреймворков и пуфа, мы за рулем. Мне они нравятся, и я не возражаю против использования Code Igniter, но решение боссов и до того, как упомянутый риск. –

ответ

5

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

И я не имею в виду сценарий, в котором вы возвращаете то, что ожидалось, чтобы быть перечислимым набором данных какого-либо рода (т. Е. Результатом запроса), но там, где возвращенный массив не имеет другого значения, что просто удерживайте два или более значений.

Один из методов, который использует сама библиотека PHP, является ссылочным параметром, например, с preg_match(). Сама функция возвращает одно значение, логическое, но при необходимости использует поставляемый третий параметр для хранения согласованных данных. Это, по сути, «второе возвращаемое значение».

Определенно не используйте формат обмена данными, такой как JSON. целью этих форматов является перемещение данных между разрозненными системами в ожидаемом, анализируемом способе. В одном выполнении PHP вам это не нужно.

+0

Отличная идея с эталонным параметром, я никогда не думал об этом. Что бы вы порекомендовали для параметров? Просто используйте несколько параметров или сочетание отдельных параметров и массивов, где необходимо? (Параметр опции для примера - массив из опций длины n) –

2

Вы можете вернуть все, что хотите: одно значение, массив или ссылку (в зависимости от потребностей функции). Просто будьте последовательны.

Но, пожалуйста, не используйте JSON внутри. Это просто создает лишние накладные расходы.

1

Я также использую массивы для возврата нескольких значений, но на практике это происходит нечасто. Если это так, обычно это разумная группировка данных, например, возврат array('x'=>10,'y'=>10) от функции, называемой getCoordinates(). Если вы обнаружите, что выполняете много обработки и возвращаете данные из массивов из множества функций, возможно, есть некоторые рефакторинги, которые можно сделать, чтобы помещать работу в меньшие единицы.

Это, как говорится, вы упомянули:

Мне нравится идея массивов в том, чтобы передать больше значения или меньше, вам просто нужно изменить массив, а не сама функция определения.

В этой связи другой метод, который может вас заинтересовать, это использовать функции с переменным числом аргументов.Это вполне приемлемо, чтобы объявить функцию без параметров:

function stuff() { 
    //do some stuff 
} 

но называть его со всеми параметрами, которые вы заботитесь, чтобы дать его:

$x = stuff($var1, $var2, $var3, $var4); 

Используя func_get_args(), func_get_arg() (сингулярное) и func_num_args() вас может легко найти/закодировать все переданные параметры. Это работает очень хорошо, если у вас нет конкретных параметров в виде, скажем, например, в sum() функции:

function sum() 
{ 
    $out = 0; 
    for($i = 0; $i < $c = func_num_args(); $i++) { 
     $out += func_get_arg($i); 
    } 
    return $out; 
} 

//echoes 35 
echo sum(10,10,15); 

Пищи для размышлений, может быть, вы найдете ее полезной.

0

Единственное, что я стараюсь избегать прохождения/возврата массивов, где ключи имеют «особое» значение. Пример:

<?php 
// Bad. Don't pass around arrays with 'special' keys 
$personArray = array("eyeColor"=>"blue", "height"=>198, "weight"=>103, ...); 

?> 

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

<?php 

Interface Person { 
    /** 
    * @return string Color Name 
    */ 
    public function getEyeColor(); 
    ... 
} 
?> 

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

Помимо этого я не могу придумать никаких причин ограничивать себя.


Примечание: чтобы быть понятным, ассоциативные массивы отлично подходят для данных списка. например:

<?php 
// Good array 
$usStates = array("AL"=>"ALABAMA", "AK"="ALASKA", ...); 
?> 
Смежные вопросы