Hi

On 4/8/22 18:47, G. P. B. wrote:
Now that null and false can be used as standalone types, I think it makes a
lot of sense to add true as a value type for the sake of completeness with
false.

I agree that it would make sense to have 'true' as the counterpart of `false` for completeness, but …

It also has many use cases within internals and userland to declare proper
type signatures to functions and methods.

… seeing the examples of functions that might return `true`, but won't return false, I feel like the correct solution is not adding `true` as a standalone type, but instead making those function return something more obvious.

- The `sort()` family should rather be be ': void' which would make it more obvious to static analysis that '$sorted = sort($unsorted)' is not a correct usage. - `DiagnoseCommand::checkComposerSchema()` in composer would benefit from having support for tagged unions, as currently both the error case (`string`) and the success case (`true`) are truthy. With the current PHP 8.1 feature set I can imagine that returning a proper bool and putting the reason in an `string &$reason` reference parameter would make it more obvious to use this function in an `if ()`. - `JsonFile::validateSchema()` in composer should be ': void' as errors appear to be communicated using Exceptions. - The closure in `ComposerRepository::asyncFetchFile()` would benefit from having support for tagged unions, but even with the current PHP 8.1 feature set I can imagine that:

    enum CacheStatus { case Hit; }

and then making the function `mixed[]|CacheStatus` instead of `mixed[]|true` would make it more obvious what the meaning of the second option in the union is.

Best regards
Tim Düsterhus

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: https://www.php.net/unsub.php

Reply via email to