Понимание троичного ложного - PullRequest
0 голосов
/ 30 апреля 2019

Тройная ложь, похоже, не имеет никакого отношения. Как это работает в этом примере?

PHP новичок здесь, у меня есть небольшая программа, которая запрашивала базовое число и возвращала результат в кубе. Сначала я написал его с помощью if / else, но получал бы ошибки «безымянного индекса», но это было решено с помощью isset (). Следующей проблемой было «Нечисловое значение» для переменной, переданной в pow (). Я получил ввод для использования троичной переменной ниже, и теперь она работает.


    <?php

    $base = (int) (isset($_POST['base']) ? $_POST['base'] : 0); 

    if ($base) {
        echo number_format(pow($base, 3));
    }
    else {
        echo 'Please enter a number';
    }

    ?>

Я ищу объяснение того, как ложь после : работает. Кажется, не имеет значения, что там - string, int и т. Д. Сначала я предположил, что, имея 0, он передает false в if / else ниже и, следовательно, повторяет оператор else.

Чтобы продолжить, я обнаружил, что просто используя (is_numeric(($_POST['base']))), как предложено @Mark Locklear в заявлении if было то, что я искал изначально. Переход по троичной тропе привел меня в заблуждение, но это был, безусловно, учебный опыт. Поэтому Как написать троичный оператор PHP не полностью решит мою первоначальную проблему. Спасибо

Ответы [ 2 ]

1 голос
/ 30 апреля 2019

Первый

(isset($_POST['base']) ? $_POST['base'] : 0)

оценивается как $_POST['base'], если ключ base существует, 0 в противном случае

Тогда ...

$base = (int) (isset($_POST['base']) ? $_POST['base'] : 0);

... приводит результат к int.

Если пользователь вводит нечисловую строку (например, ABC) или пропускает пустую строку, тогда $base устанавливается на 0

Наконец

if ($base) {

бросает $base в логическое значение. Любое число, отличное от 0, оценивается как true. 0 оценивается как false и приводит к выполнению блока else.


Любые входные данные, отличные от 0, будут в кубе.

Без ввода, нечисловая строка или значение 0 приведут к Please enter a number

0 голосов
/ 30 апреля 2019

PHP свободно набран.Что это в основном означает, что любая переменная может изменить свой тип в любое время.Вы могли бы иметь $base = 'zero';, что означало бы, что это строка, а затем на следующей строке было бы $base = 0;, и PHP это не волновало бы.

Вы правы в том смысле, что 0 равно эквивалентен ложному, и этот PHP разрешит его как ложное, но строго говоря 0 является целым числом.Если вы хотите пометить условие как логическое ложное значение, чтобы прояснить свой код, вы должны просто использовать false вместо 0.

При работе с If условными выражениями, false, 0, null и '' разрешатся как false.

...