🛀 Играем в return true to win


Дошли, наконец, руки до презабавнейшей игры return true to win. О ней, в первую очередь, я узнал из нашего рабочего чатика, а потом уже на каждом углу стал встречать. Пройти её (с далеко не всегда лучшими результатами) получилось минут за 15 и я решил выложить свои решения с небольшими комментариями. Возможно, кому-то будет интересно.

  1. !0 - очевидно, что отрицание нуля - true
  2. function(){return 'true';} - тут я смалодушничал и решил “в лоб”
  3. 1. - это просто запись единицы типа float которая не равна строго единице типа int
  4. 0 - хммм, вообще не понял в чём тут должна была быть заковырка
  5. '💩' - юникод может состоять и из четырёх байт
  6. new class{function __invoke(){return $this;}} - создаём класс, который при вызове его как функции возвращает сам себя (подробнее об этом).
  7. (object)[!0] - ничего умнее не придумал 🤔
  8. new class extends Bar{} - ну тут очевидно, что чтобы класс был другой, но проходил проверку типов - наследуемся от него
  9. 'a' - немного ломаем систему, но проходим этап 🙈
  10. function(&$x){$x = new Bar(!0);} - опять смалодушничал и просто переопределил “неправильный” объект “правильным”. Наверное, можно было через какую-нибудь крутую магию, но я туповат
  11. [null] - ну а что не так???

Есть идеи лучше? Предлагай!