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.