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