thrift-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "David Reiman (JIRA)" <>
Subject [jira] [Commented] (THRIFT-4070) Generated PHP for Thrift sets are incompatible with PHP
Date Thu, 09 Feb 2017 19:28:41 GMT


David Reiman commented on THRIFT-4070:
-------------------------------------- The built-in Set data structure and other data structures
are only available in PHP 7; many apps that use Thrift may still be on PHP 5.x

> Generated PHP for Thrift sets are incompatible with PHP
> -------------------------------------------------------
>                 Key: THRIFT-4070
>                 URL:
>             Project: Thrift
>          Issue Type: Bug
>          Components: PHP - Compiler
>            Reporter: David Reiman
> In the `TBase` class that all Thrift generated code inherits from, there is a `_writeList`
method that takes a boolean of whether or not the "list" in question is a set. The assumption
here is that since PHP has no built-in Set data type, we can duplicate the uniqueness constraint
of Sets by looking at the keys of a PHP associative array. Here's the associated code in `_writeList`:
> ```
> foreach ($var as $key => $val) {
>       $elem = $set ? $key : $val;
>       if (isset($ewrite)) {
>         $xfer += $output->$ewrite($elem);
>       } else {
>         switch ($etype) {
>         case TType::STRUCT:
>           $xfer += $elem->write($output);
>           break;
> ```
> I want to point out again that if we're using a `TType::SET`, the `$set` variable will
be `true`, and `$elem` will be the `$key`, not the `$value`. Here's the problem, from PHP
array documentation (
> "The key can either be an integer or a string. The value can be of any type...Arrays
and objects can not be used as keys. Doing so will result in a warning: Illegal offset type."
> In other words, it is impossible to implement a Thrift set of anything other than strings
or integers given the current implementation of PHP generated code.

This message was sent by Atlassian JIRA

View raw message