Документация

Документация php2go

Практическое руководство для пользователя: как подготовить ZIP, выбрать entrypoint, запускать разрешённые команды, скачать artifact и понять частые ошибки компиляции.

Быстрый путь к первой сборке
  1. Упакуйте проект в ZIP без секретов и мусора.
  2. Проверьте, что entrypoint существует, обычно public/index.php.
  3. Запустите report/check/deps перед compile.
  4. Скачайте artifact и запустите бинарник по README_RUN.
COMPAT

Совместимость с PHP

Цель php2go — сохранять поведение PHP там, где оно важно, но при этом генерировать быстрый Go-код. Чем статичнее и понятнее проект, тем меньше fallback-ов и тем чище результат.

Обычно хорошо компилируется

  • Классические MVC-приложения, роутеры, контроллеры, сервисы и шаблоны.
  • Composer autoload, обычные классы, наследование, интерфейсы и многие стандартные PHP-функции.
  • Работа с массивами, строками, JSON, датами, файлами, сессиями и HTTP-запросом.
  • Типизированный код и старый нетипизированный код, если связи классов можно вывести анализом.

Что требует внимания

  • Полностью динамические вызовы вроде call_user_func($_REQUEST[...]) и new $unknown.
  • Редкие PHP-расширения, нестандартные stream wrappers, сложные GD/Imagick/OpenSSL edge cases.
  • Проекты, где важная логика лежит в случайных test/dev файлах или подключается условно.
  • Код, завязанный на глобальное состояние процесса, нестандартный ini или shell-команды.
Зачем нужен report

Команда report показывает, что компилятор увидел: классы, функции, reachable-код, fallback-и и проблемные места. Это первый документ для техподдержки.

Пример прямой генерации

Когда типы и структура массива понятны, компилятор может заменить PHP-динамику на обычный typed Go-код.

PHP исходник
final class UserService
{
    public function name(array $row): string
    {
        return trim((string) ($row['name'] ?? ''));
    }
}
Типичный Go-вывод
func (this *UserService) Name(v_row php.Array) string {
    return php.Trim(php.ArrayGetStringDefault(v_row, php.StrKey("name"), ""))
}