PHP свободно набирает в то время как сравнение цикла - PullRequest
0 голосов
/ 02 апреля 2010

Учитывая следующий фрагмент кода:

  $i= 11;
  function get_num() {
    global $i;
    return (--$i >= 0) ? $i : false;
  }
  while($num = get_num()) {
    echo "Number: $num\n";
  }

Результатом будет следующий вывод:

Number: 10
Number: 9
Number: 8
Number: 7
Number: 6
Number: 5
Number: 4
Number: 3
Number: 2
Number: 1

Однако я также хочу, чтобы он вывел Number: 0 - но цикл while оценивает 0 как false, поэтому цикл никогда не достигнет этой точки. Как заставить цикл завершаться только в явном false?

Ответы [ 4 ]

2 голосов
/ 02 апреля 2010
while( ($num = get_num()) !== false ) {

extra = также принудительно проверяет тип.

0 голосов
/ 19 января 2018

Я заметил, что вы используете global. Некоторые разработчики кричат ​​об использовании global, когда в этом нет необходимости. Кроме того, вы можете опустить скобки, если напишите false!== перед объявлением $num (ничего страшного, просто заметка).

Вариант 1

function get_num() {
    static $i=11;  // effectively only declare the value once
    return (--$i >= 0) ? $i : false;
}
while(false!==$num=get_num()){
    echo "Number: $num\n";  // $i is NOT available outside the scope of the function.
}

Вариант 2

function get_num($i) {
    return (--$i >= 0) ? $i : false;
}
$num=11;  // declare in global scope
while(false!==$num=get_num($num)){  // pass it to function as an argument
    echo "Number: $num\n";
}
0 голосов
/ 02 апреля 2010

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

Итак, вы можете использовать что-то вроде:

while(($num = get_num()) !== false) {
    echo "Number: $num\n";
}

При этом 0 не будет считаться тем же, что и false.


Для справки: Операторы сравнения (цитирование)

$a == $b: равно : TRUE если $a равно $b.
$a === $b : Идентично : TRUE, если $a равны $b, , и они имеют тот же тип .

0 голосов
/ 02 апреля 2010
<?php
  $i= 11;
  function get_num() {
    global $i;
    return (--$i >= 0) ? $i : false;
  }
  while(($num = get_num())!==false) {
    echo "Number: $num\n";
  }
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...