2011-09-09 6 views
2

아마도 이것은 문체적인 질문 일 수도 있고 아마도 "올바른"대답 일 수도 있습니다.여러 값을 반환하는 PHP 스타일

여러 개의 값을 반환 할 필요가있는 PHP 함수를 (그 들어오는 인수 있습니다) 선호하는 경우 :

function myFuncReturnVals ($a, $b) { 
// do stuff 
return array ($a, $b) 
} 

function myFuncByRef (&$a, &$b) { 
// do stuff 
} 

list($a,$b) = myFuncReturnVals ($a,$b); 
myFuncByReb($a,$b); 

어느 쪽이든이 작업을 완수하지만, 이는 바람직하다 ?

ReturnVals는 호출자가 값을 수정할 것인지 결정할 수 있으므로 일부 측면에서는 조금 더 깨끗해 보입니다.

그러나 ref의 경우 기능의 의도가 실제로 해당 데이터와 관련이 없으므로 때로는 더 잘 맞는 것으로 보입니다.

혼합 및 일치는 어떻게됩니까? 어떤 데이터를 되돌려 주어야 할 책임이 대부분 있지만 처리 중에 들어오는 매개 변수에 대한 추가 정보가있을 수있는 기능이 있다면 어떻게 될까요?

답변

2

나는 전염병과 같은 참조 매개 변수를 피하는 경향이 있습니다. 당신이 정의하는 시점에서 무엇을하는지는 명백합니다. 그러나 대부분의 경우, 당신은 그들의 사용법을보고있을 것입니다. 그 매개 변수들이 참조에 의한 것이 든 값에 의한 것인가를 명확히 밝혀야한다.

return-as-array 패러다임을 고수하는 것이 더 읽기 쉽고 부작용을 쉽게 피할 수 있습니다. 하나 개 이상의 기능 값 모음의 같은 종류의 반환이있는 경우

$output = nl2br(
      detect_links(
      htmlspecialchars(
      trim($input)))) 

것은, 그것은에 그들을 배치 가치가있을 수 있습니다 : 행동이 보이는 스타일의 종류 - 또한 기능을 체인하는 호출/중첩 할 수 있습니다 class - 이렇게하면 (phpdoc) 주석이 없어도 리턴 값이 더 알기 쉽고 함수 인자에 형식 힌트를 추가하여 그러한 값을 사용하는 다른 함수에 유효하지 않은 입력을 포착 할 수 있습니다.

또한 개체는 이미 참조 형식이므로 참고로 전달하면 개체 전체를 바꾸는 것이 좋습니다. 개별 필드를 변경하거나 파괴적인 메서드를 호출하면 원래 개체가 변경됩니다. 값. 예 :

<?php 
class Bar { 
    public $x; 
    public function __construct($x) { $this->x = $x; } 
} 

function foo($bar, $x) { 
    $bar->x = $x; 
} 

$myBar = new Bar(23); 
$foo($myBar, 42); 
printf("$foo->x is now %s\n", $foo->x); 
1

중요한 사항. 코딩 스타일과 일치하는 방법을 사용하십시오. 나는 오히려 배열을 반환합니다.

관련 문제