2010-08-22 10 views
4

Heya 얘들 아, 이제는이 방법을 사용하지 않으 셨습니다. 나는 그것이 작동 하는지를보기 위해 노력했지만 꿈처럼 작동합니다.잘못되었거나 맞습니까? While 루프

일반적으로 사람들은 이러한 경향이 있습니다.

$tags = array(); 
while($row = $statement->FetchObject()) 
{ 
    $tags[] = $row; 
} 

하지만 빠르게하거나 적은 코드 내가 이런 식으로하는 경우에 할 것이다.

$tags = array(); 
while($tags[] = $statement->FetchObject()){} 

그냥 호기심이 모든


업데이트입니다 :

내가 클리너 코드가 훨씬 더 적은 다음 코드가 이해 모르겠지만, 나는 그것이 단순한 호기심가 전에이 방법을 사용한 적이로 장점과 단점.

+0

이렇게해서는 안됩니다. getArr 메소드 내부에 '$ tags = $ db-> getArr();' 내부 - 예. 주 코드에는 없습니다. –

답변

15

일반적인 문제는이 while 루프는 "거짓"결과가 반환 될 필요를 종료하는 것입니다. 두 번째 예에서는 배열의 끝에 "거짓"값 (원하는 것 같지 않음)이 있음을 의미합니다.

"false"값이 $row으로 지정되고 배열에 적용되지 않았기 때문에 이는 전통적인 접근 방식에서는 문제가되지 않습니다.

코드는 사용자가 원하는대로 수행하지 않기 때문에 성능이나 가독성은 문제가되지 않습니다.

+0

아주 좋은 점은, 나는 그것을 시험해보고 너의 100 % 정확한 – RobertPitt

1

나는 전자를 훨씬 더 읽기 쉽고 이해하기 쉽다는 것을 알았습니다. 두 성능 차이는 무시할 만합니다.

나는 모두 1). 한 FetchObject() 적절가 호출 될 때마다 그것의 반환 값을 변경으로

0

물론,)

3

데이터베이스 클래스에서 허용하는 경우 미리 정의 된 방법을 사용하면됩니다. PDO는 예를 들어 fetchAll : $statement->fetchAll(PDO::FETCH_OBJ)입니다.

는 당신은 괄호를 건너 뛸 수
+0

+500 이것을 위해. 같은 지점으로 코멘트를 남길 예정이었습니다 –

+0

+500 LOL이 아니라 FetchAll에 대해 알고 있습니다 만 여기에 사용하지 않은 이유는'$ row-> 태그와 같이 제거 된 루프 내에 더 많은 코드가 있기 때문입니다 = Many-> Many 쿼리의 경우 $ this-> getTagsForPost ($ row-> feed_id); – RobertPitt

+0

@Robert는 SQL을 사용하지 않는 것처럼 보입니다. 어쨌든 데이터 루프를 얻는 데 아무런 이유가 없습니다.이 데이터를 반복하려면 어레이를 가져 와서 반복하십시오. –

1

:

$tags = array(); 
while ($tags[] = $stmt->fetchObject()); 

그 코드가 확실히 더 자세한 형태의 것을 조금 짧은 :

$tags = array(); 
while ($tag = $stmt->fetchObject()) { 
    $tags[] = $tag; 
} 

그러나 사람이 쉽게 읽을 수있다? 둘 다 꽤 분명하고 실제로 당신에게 동의 할거라고 말할 수 있습니다. 그러나 어느 것이 일반적인 유지 보수에서 더 쉬운가? 더 짧은 형식의 $tag->doSth();과 같은 새 명령문을 추가하려면 완전히 다시 작성해야합니다. 마지막 문장에는 그 문장을 추가하기 만하면됩니다.