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

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

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

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

Как писать PHP, чтобы Go был быстрее

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

Помогает компилятору

  • Указывайте типы аргументов и return type там, где они известны.
  • Передавайте массивы и DTO явно, не прячьте структуру в глобальных переменных.
  • Держите entrypoint, роутинг и сервисы в понятных классах с Composer autoload.
  • Используйте простые условия и явные fallback-и вместо глубокой магии и произвольных callback-ов.

Чаще даёт fallback

  • Динамические имена классов без понятного namespace-префикса.
  • Массивы, которые в разных ветках становятся строкой, объектом и числом.
  • Магические свойства и методы без стабильной инициализации.
  • Большие vendor/test/dev директории, которые не используются в runtime, но попадают в анализ.

Хороший стиль для анализа

PHP исходник
function userId(array $user): int
{
    return (int) ($user['id'] ?? 0);
}
Типичный Go-вывод
func f_userId(v_user php.Array) int64 {
    return php.ArrayGetIntDefault(v_user, php.StrKey("id"), 0)
}
Почему так быстрее

Компилятор видит array → int и может сгенерировать прямой typed-accessor вместо общего PHP-приведения в рантайме.