[ https://issues.apache.org/jira/browse/THRIFT-4070?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15860039#comment-15860039 ]
David Reiman commented on THRIFT-4070: -------------------------------------- http://php.net/manual/en/intro.ds.php 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: https://issues.apache.org/jira/browse/THRIFT-4070 > 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 > (http://php.net/manual/en/language.types.array.php): > "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 (v6.3.15#6346)