UPD базы знаний

Люблю я всякую магию. Люблю фокусы, умею их показывать. И в программировании мне так же нравятся фокусы. Не раз уже писал про фокусы в JS, реже в PHP. А ведь PHP это язык с которого началась моя любовь к фокусам еще в далеком 2009 году, когда я еще тусил на PHPClub 🙂

Еще в далеком 2015 году на хабре я писал статью Безумный PHP. Фьюри код. Захотелось немного обновить пост, показать новые (может быть для кого-то уже не новые) трюки, поправить старые…

Как в PHP переопределить TRUE?

Этот вопрос частично был отвечен в статье на Хабре еще в 2015 году и там я приводил примеры, которые пришли в голову — определение через неймспейсы:

// Так сделать не получится в глобальной области, а внеймспейсе
// Notice: Constant true already defined in ...
namespace {
define('true', false);
}
//или
namespace Hack {
define('Hack\true', false);
var_dump(true === false); // true
}

Но сейчас эти способы не работают в PHP 7.3. Позже, я узнал метод лучше, как сделать такую шутку в глобальном скопе. Метод был описан на Reddit еще очень очень давно:

use const true as false;
var_dump(true );          // true
var_dump(false); // true
var_dump(true === false); // true

Парам пам пам! Пруф: https://3v4l.org/3ZbNW

Играя этим можно делать разные первоапрельские трюки:

use const false as null;
use const null as false;

Но если хочется сорвать башню, то можно сделать так:

use const NAN as true;
var_dump(true === true); // false
var_dump(true == true); // false
var_dump(true == false); // false
var_dump(true == NAN); // false

Вот это будет реально отрыв башки, так как NAN != NAN.