5 Commits
Author SHA1 Message Date
Volodymyr Panivko c179da4351 THRIFT-6004: Emit native types on generated PHP service-level methods (#3483)
Client: php

Update t_php_generator to emit native PHP parameter and return types on
all generated service-level code:

* Interface (*If.php): public methods now declare typed params and
  return — `foo(?string $thing): ?string`.
* Client (*Client.php): typed constructor
  `__construct(TProtocol $input, ?TProtocol $output = null)`; typed
  `$input`/`$output`/`$seqid` properties; typed RPC methods, typed
  `send_*` (synthetic t_function with g_type_void return), typed
  `recv_*` (already synthetic; now inherits the parent
  function_signature return-type machinery).
* Processor (*Processor.php): typed
  `__construct(object $handler)`; typed
  `protected ?object $handler_ = null`; typed
  `process(TProtocol $input, TProtocol $output): bool` (changed the
  early "method not found" `return;` to `return false;` to satisfy the
  declared return type); typed
  `process_NAME(int $seqid, TProtocol $input, TProtocol $output): void`.
* Rest (*Rest.php): typed `__construct(object $impl)`; typed
  `protected object $impl;`; typed method signatures
  `methodName(array $request): ?T`; emit `return` only when the
  underlying impl method returns non-void.

Implementation
--------------

* New helper `type_to_return(t_type*)` renders `: void` or `: ?T` for
  return-type clauses, sharing the existing `type_to_native()` mapping.
* `function_signature()` extended to append `type_to_return()` for the
  return type; `argument_list()` extended to emit `?type_to_native()`
  on every parameter (previously only struct/container types were
  typed).
* `send_*` emission now constructs a synthetic
  `t_function(g_type_void, ...)` so `function_signature()` produces
  the correct `: void` for the writer half of the RPC.

Drive-by cleanup
----------------

`ThriftClassLoader::findFileInApcu()` (merged in THRIFT-6001) was
flagged by PHPStan: the trailing `$file !== false ? $file : null`
arm is unreachable because the if-branch reassigns `$file` to the
findFile() result (`?string`). Rewrote the body to a clear two-step
fetch-or-recompute and narrowed the return through `is_string()` to
satisfy the analyser without relying on a phantom else-arm.

Generated fixtures regenerate via `make stubs` in CI; nothing
checked in changes.

Part of umbrella THRIFT-5960 (PHP modernization).

Generated-by: Claude Opus 4.7
2026-05-15 19:15:53 +02:00
Volodymyr Panivko 96f1e3f92b THRIFT-5757: align Python cross-test launchers 2026-04-09 01:42:49 +02:00
Volodymyr Panivko 76113eb5ab THRIFT-5757: finish PHP cross-test integration 2026-04-09 01:42:49 +02:00
Volodymyr Panivko 0564434e0b THRIFT-5587: Add UUID support for PHP
Client: py
Patch: Volodymyr Panivko

This closes #3332
2026-03-15 22:39:44 +01:00
Volodymyr Panivko 68139d117f [THRIFT-5757] Unit tests for php lib
Client: php
Patch: Volodymyr Panivko

This closes #2951
2024-04-07 22:52:47 +02:00