Что означает это утверждение? - PullRequest
3 голосов
/ 08 января 2010

В то время как

$w is an Array ( [0] => 4, [1] => 6 )

что означает это утверждение:

$day == $w[0] || $day == $w[1] || $day < ((7 + $w[1] - $w[0]) % 7);

Пожалуйста, помогите. Я не видел оператора || внутри оператора, отличного от if или while. Спасибо.

РЕДАКТИРОВАТЬ 01:

Это исходная функция, в которой она используется для поиска номера определенного дня в диапазоне дат:

// find number of a particular day (sunday or monday or etc) within a date range
function number_of_days($day, $start, $end){
    $w = array(date('w', $start), date('w', $end));
    return floor( ( date('z', $end) - date('z', $start) ) / 7) + ($day == $w[0] || $day == $w[1] || $day < ((7 + $w[1] - $w[0]) % 7));
}

Это не было создано мной. Но я хотел отредактировать эту функцию, потому что, когда последний день - суббота, он также учитывает следующее воскресенье, что неправильно.

Ответы [ 4 ]

7 голосов
/ 08 января 2010

Это просто составное логическое выражение, которое возвращает true, если любое из следующих четырех подвыражений равно true:

  • $day == $w[0]
  • $day == $w[1]
  • $day < ((7 + $w[1] - $w[0]) % 7)
4 голосов
/ 08 января 2010
$day == $w[0] || $day == $w[1] || $day < ((7 + $w[1] - $w[0]) % 7);

Оператор оценивает (в этом примере ничего не назначено) логическое значение true / false.

Выражения эффективно вычисляются в порядке

Например

true || false || false => true

false || false || false => false

Это означает, что если любое из «подвыражений» истинно, тогда все выражение будет иметь значение true. Это можно присвоить переменной $v = expression или использовать в if (expression)

4 голосов
/ 08 января 2010

Вы были правы в одном из ваших комментариев, что логическое выражение добавляется как целое число как 1 или 0.

Если вы приведете логическое значение к целому числу, тогда FALSE получит 0, а TRUE получит 1.

Если вы добавляете переменные с разными типами данных, и одна из переменных является целым числом, то остальные переменные приводятся к целым числам, что составляет:

var_dump(1+true);
// Result: int(2)

Две ссылки, объясняющие, что происходит, если вы используете + для разных типов данных, и что происходит, если определенный тип данных приводится к целому числу:

http://php.net/manual/en/language.types.type-juggling.php
http://www.php.net/manual/en/language.types.integer.php#language.types.integer.casting

2 голосов
/ 08 января 2010

||логический оператор ИЛИПожалуйста, смотрите документацию для более

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