2011-05-06 2 views
2

PHP에서 preg_match()을 사용하는 콜백 함수가 있습니다 (정확한 내용은 내가 생각하는 것과 관련이 없습니다).PHP에서 계산에서 반환을 분리하는 이점이 있습니까?

결과를 계산하고 변수에 할당 한 다음 해당 변수를 반환하는 것이 좋습니까? 아니면 결과를 반환해야합니까? 즉

은 더 나은이 작업을 수행하는 것입니다

function a() { 
    $result = preg_match(); 
    return $result; 
} 

또는

function b() { 
    return preg_match(); 
} 

내가 코드 스타일과 성능면에서 생각하고 있어요. 내가 따라야 할 표준이 있습니까, 아니면 정말로 중요하지 않습니까?

+0

아래 @ 마크 B의 대답을 읽은 후에, 나는 이것을 조사해 보았습니다. 위의 첫 번째 방법은 실제로 http://stackoverflow.com/questions/1795425/how-to-get-opcodes-of-php에 설명 된 방법을 사용하여 하나의 opcode (ASSIGN)가 호출되도록합니다. – mpdonadio

+0

@MPD 와우 덕분에! 그래서 제가 정말로 마이크로 최적화가된다면 두 번째 모델과 함께 갈 것입니다.하지만 이전에 말했듯이 그다지 큰 차이는 없습니다. –

+0

나는 그것이 실제로 효과를 내지 않는다고 생각합니다. 나는 최적화를위한 증거로서 timed for-loops에 100 % 신뢰를 두지 않는다. 이유를 설명하고 입증 (asm, opcode, 바이트 코드 등) 할 수 있다는 것이 핵심입니다. – mpdonadio

답변

7

성능 측면에서 볼 때 두 가지 경우에는 차이가 없습니다.

코딩 스타일과 관련하여 개인적인 취향이 중요합니다. 개인적으로, 나는 더 깨끗하고 읽기 쉽기 때문에 두 번째를 옹호 할 것이지만, 누군가는 당신을 어느 방향으로 잘못 생각하지 않을 것이라고 생각합니다.

+3

+1 확실히 개인적 취향. 코드가 스스로 문서화하기에 충분히 단순하다면, 나는 종종 단일 행 방식을 사용할 것이다. – Austin

2

개인적으로 변수를 반환하려고합니다. 디버그 중에 변수를 어딘가에 기록하려고하거나 적어도 뭔가가 불안해지면 print_r 또는 assert에 사용할 수 있습니다. 나는 또한 문자열 조작과 함께, 또한 요구 사항이 변경 될 수 있다고 생각하면

$foo = step1($foo); 
$foo = step2($foo); 
$foo = step3($foo); 
return $foo; 

과 같은 일을하는 경향이 있습니다. 이 스타일을 사용하면 쉽게 주석 처리/주석 처리를 제거 할 수 있습니다.

일반적으로 나는 명확성과 자체 문서화를 위해 코드를 작성하지만, 상황이 어떻게 바뀌는 지 예상하고 따라서 영향이 최소화되도록 사물을 구현하려고합니다.

2

$ return 변수를 인스턴스화하는 성능에 현저한 타격이있을 수 있지만 실제 상황에서는 눈에 띄지 않습니다. 일반적으로 나는 그 가치를 더 다룰 필요가없는 한 직접적인 수익을 올릴 것입니다.

+0

단순한 호기심에서 두 가지 예가 서로 다른 바이트 코드가된다는 것을 확인했거나 읽었습니까? preg_match의 출력은 반환되어야 할 곳 (스택, 임시 변수 등)으로 가야하지만, 어느 쪽이든 말하기에는 PHP 런타임에 대해 충분히 알지 못합니다. 나는 C 컴파일러가 동일한 asm을 생성하는 경우를 보았다고 생각하지만, 그것은 다른 볼 게임이다. – mpdonadio

+0

잘 모르겠다. 나는 두려운 일이 일어나지 않는 것을 보았을 때 두려운 일을 결코 겪어 보지 못했습니다. –

관련 문제