[
https://issues.apache.org/jira/browse/THRIFT-4070?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
James E. King, III updated THRIFT-4070:
---------------------------------------
Priority: Major (was: Blocker)
> 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)