Сегодня в официальной документации PHP над каждым примером кода появилась кнопочка Run code, которая позволяет выполнить его и сразу увидеть результат. При этом код в примерах можно редактировать, что позволяет экспериментировать с ним или адаптировать под свою задачу. К примеру, в функцию crc32() можно подставить своё значение и получить контрольную сумму.

Данная функциональность пока работает в тестовом режиме и имеет скорее статус демонстратора возможностей. Наверняка будет выявлено и исправлено множество багов. Но сам факт не может не радовать, такой функционал очень удобен. В планах добавление возможности выполнять код для разных версий PHP.

Фича реализована с помощью технологии WebAssembly (WASM). То есть, в отличие большинства онлайн-песочниц, которые отправляют код для выполнения на сервер, здесь выполнение происходит прямо в браузере. При запуске примера загружается 4-мегабайтный файл php-web.wasm, который и содержит интерпретатор РНР. Одним из очевидных преимуществ такого подхода является полное отсутствие проблем с безопасностью и производительностью сервера - ведь весь код выполняется в браузере пользователя!

Уже довольно давно этот подход использовался в популярной песочнице 3v4l.org в режиме live preview, так что это был только вопрос времени (и наличия энтузиаста, который предложит пулл-реквест).

Понятное дело, что примеры, которым нужна инфраструктура, работать не будут. Тут всё ещё придётся использовать либо локальный сервер, либо сторонние песочницы, такие как например https://phpize.online/, которую разработал и поддерживает Слава @rozhnev, и которая предоставляет уникальную интеграцию со всеми популярными БД.

Кроме того, поддерживается только функционал, включённый в ядро, без модулей. К примеру, не работают примеры для расширения mbstring (впрочем, там почему-то и самих примеров-то почти нет). Но для большинства стандартных функций примеры работают. Например, для недавно добавленной array_find.

Надо сказать, что многие примеры не адаптированы к живому исполнению и попросту выдают ошибку, поскольку не содержат необходимый контекст. Особенно забавно при этом выглядит страница с примерами использования перечислений, на которой первые два примера вообще ничего не выводят, а третий выдаёт ошибку, поскольку требует код из предыдущего примера.

Но такие проблемы как раз легко исправимы, благодаря ещё одному недавнему улучшению: внизу каждой страницы есть ссылка Submit a Pull Request, которая ведёт на исходник страницы в официальном репозитории документации на Github. Так что предложить исправление не сложнее, чем пофиксить ошибку в своем коде.

Комментарии (13)


  1. rozhnev
    03.12.2024 18:23

    Кстати нужно PHP 8.4 добавить phpize.online


  1. evgeniy_kudinov
    03.12.2024 18:23

    Забавно. Это получается фронтенд можно на PHP делать, и скоро фреймворк для фронта появится? Пока php-wasm версия v0.0.9-alpha.


    1. liaf4_4
      03.12.2024 18:23

      Да и бэкенд в браузере необычно…

      Браузерный nginx. С MySQL.


      1. Sanchous98
        03.12.2024 18:23

        Ну nginx точно не нужен, коли мы уже в браузере. А вот Mysql в браузере это сильно)


      1. pantsarny
        03.12.2024 18:23

        а зачем каждому своя база?


        1. zweroboy1
          03.12.2024 18:23

          Indexeddb же есть для чего-то. Чтобы хранить большие объемы юзерских данных у юзера, а не на сервере.


    1. YegorP
      03.12.2024 18:23

      В экосистеме .NET такой фиче уже сто лет в обед (Blazor), но что-то крупные игроки не спешат её использовать.


  1. supercat1337
    03.12.2024 18:23

    Приятно удивлен. Молодцы. Ещё бы веб-сокеты добавили бы и тогда будет супер.


    1. SerafimArts
      03.12.2024 18:23

      Эм, чтобы что?


    1. Sanchous98
      03.12.2024 18:23

      А какие у вас сейчас проблемы с вебсокетами? Они есть вообще-то, на ReactPHP можете построить долгоживущее приложение для работы с вебсокетами


      1. supercat1337
        03.12.2024 18:23

        То есть для этого уже не нужен отдельный сервер PHP (в пример беру swoole)? Если так, то супер)


        1. AleksandrTm
          03.12.2024 18:23

          что значит отдельный сервер swoole, swoole лишь расширение для php

          а как вы без сервера php хотите работать с ws? =)


          1. supercat1337
            03.12.2024 18:23

            Хочу, чтобы все сразу было) Ну, хотелка у меня такая. Мечтать не вредно же?)