“Не-не” отрицательный php-хинт

Сейчас занят запуском одного блога на игровую тематику, а так же пошли уже первые клиенты с курса Сергея Жуковского, что радует. Практикуюсь в быстрой и качественной настройке WordPress.
Чтобы вы не скучали напишу небольшой php-хинт, который, мне кажется, понравится изучающим этот язык. Во всяком случае мне он показался забавным и не лишённым изысканности)


Кто из вас не встречал подобный php-код?

function foo( $foo ) {
    // тварим чудеса
    if ( $foo ) // $foo не булевое значение
        return true;
    else
        return false;
}

Всё очень просто - требуется вернуть булевое значение (true/false), только проблема в том, что сама переменная $foo не обязательно булевого типа, поэтому нельзя вернуть её напрямую.

Вариант 1, приводим его к булевому значению

function foo( $foo ) {
    // фокус-покус
    return (boolean) $foo;
}

Вариант 2, приводим его к булевому значению (укороченный вариант)

function foo( $foo ) {
    // фокус-покус
    return (bool) $foo;
}

Вариант 3, двойное-отрицание!!!

function foo( $foo ) {
    // фокус-покус
    return !!$foo;
}

Первое отрицание (оператор не - !) приводит $foo к отрицательному булевому значению, т.е. false, а следующее “не” переворачивает уже к изначальному значению, но в булевом виде).

И напоследок - не сложно догадаться, что если вам нужно вернуть true, когда передаваемая переменная false, то убираем одно “не”:

function foo( $foo ) {
    // вуаля
    return !$foo;
}

Вот и всё, надеюсь вам понравилось;-)

Из той же оперы, так что прочти обязательно:

Метки: , , , , ,

2 комментария на ““Не-не” отрицательный php-хинт”

  1. Allex пишет:

    Интересно бы ещё оценить варианты с точки зрения производительности. Понятное дело, что на практике разницы заметно не будет, просто любопытно. Для интерпретации с умной JIT компиляцией скорее всего результат будет одинаковый. Без оптимизации исходный вариант скорее всего равен вариантам 1-2, а вот 3 будет подольше. Ну и с точки зрения читабельности вариант 3 - не вариант :)

  2. Tapac пишет:

    К сожалению я не владею навыками нагрузочного тестирования)

Оставить комментарий

Вы должны войти чтобы оставить комментарий.