Неправильно или правильно? Пока петли - PullRequest
4 голосов
/ 22 августа 2010

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

Обычно люди склонны так поступать.

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

но будет ли это быстрее или меньше кода, если я сделаю это таким образом.

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

Просто любопытно, вот и все


Обновление:

Я понимаю, что код Cleaner намного лучше, чем код Less, но, поскольку я никогда раньше не использовал этот метод, это было просто любопытство за и против.

Ответы [ 5 ]

15 голосов
/ 22 августа 2010

Общая проблема заключается в том, что для выхода из цикла while необходимо вернуть «ложный» результат.Во втором примере это означает, что в конце вашего массива будет «ложное» значение (которое, скорее всего, не то, что вам нужно).

Это не проблема для традиционного подхода, поскольку «ложь»"значение присваивается $row и никогда не применяется к массиву.

Что касается производительности или читабельности, они не являются проблемой, поскольку код не выполняет то, что вы хотите.

3 голосов
/ 22 августа 2010

И если ваш класс базы данных это позволяет, просто используйте предопределенный метод для этой цели. Например, PDO имеет fetchAll: $statement->fetchAll(PDO::FETCH_OBJ).

1 голос
/ 22 августа 2010

Вы могли бы даже пропустить скобки:

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

Этот код, безусловно, немного короче, чем его более подробная форма:

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

Однако какой из них легче читать?Вы могли бы сказать, что оба вполне очевидны, и на самом деле я бы согласился с вами.Но какой из них легче в общем обслуживании?Чтобы добавить новое утверждение, например $tag->doSth();, в более короткой форме, вы должны полностью переписать его.В последнем вы просто добавляете это утверждение.

1 голос
/ 22 августа 2010

Я считаю, что первое намного более читабельно и легко для понимания, и я уверен, что любая разница в производительности между ними незначительна.

Я все за 1).

0 голосов
/ 22 августа 2010

Конечно, до тех пор, пока FetchObject() соответствующим образом меняет свое возвращаемое значение при каждом вызове;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...