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"), ""))
}