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

Документація 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"), ""))
}