On Wed, 23 Jan 2019 at 15:43, Claude Pache <[email protected]> wrote:
> So, since you didn’t see, here are some practical usages of settype():
>
> <?php
> function foo($bar) {
> // $bar is supposed to be either a string, or a list of strings
> settype($bar, 'array');
> // ...
> }
>
> function qux($id) {
> if (!(is_int($id) || is_string($id) && ctype_digit($id)))
> throw new \TypeError;
> settype($id, 'int');
> // ...
> }
>
> class Foo implements SeekableIterator {
> function seek(/* int */ $position): void {
> // NOTE: we cannot use int typehint here, because PHP7.1 requires
> mixed
> settype($position, 'int');
> // ...
> }
> }
> ?>
>
All these examples could very well use a typecast and or one of the *val
functions
> Here are a usage of settype() with a non-constant second parameter: Define
> a utility function that cast a value to a given type when it is not null:
>
> <?php
> function cast_opt($val, $type) {
> if ($val !== null)
> settype($val, $type);
> return $val;
> }
>
> $foo = cast_opt($bar, 'int') // equivalent to: $foo = $bar === null ? null
> : (int) $bar;
> ?>
>
> Sure, one can avoid settype() and do it the complicated way, but why? What
> is the issue with settype(), so that you want to deprecate it?
>
You didn't necessarely need to specify an example with a non-constant
second parameter
because you already gave valid arguments as why not to deprecate it, just
that I didn't see
them. I do appreciate the example however.
Why I want*ed* to deprecate is because I personally didn't see any usage
before,
you provided a valid usage and I don't see the point of deprecating it
anymore.
Maybe that wasn't clear from my previous reply. Because indeed removing
settype
brings back the same issue that I raised with gettype.
As it currently stands the only way I can see how settype can possibly be
deprecated
is ih PHP introduces a ReflectionVar classe which, like said in my initial
email, seems
like total overkill when a simple function exists.
Hope this clears everything up
Best regards
George P. Banyard