> Le 23 janv. 2019 à 14:19, Girgias <george.bany...@gmail.com> a écrit :
> 
> 
> 
> On Wed, 23 Jan 2019 at 09:19, Claude Pache <claude.pa...@gmail.com> wrote:
> 
>> 
>>>  - settype
>> 
>> AFAICS, there is no easy replacement for settype(). If the second argument
>> is a string literal, you can use type coercion + assignment at the price of
>> duplicating the occurrence of the first argument. If the second argument is
>> not known at compile time, you have to resort to a switch statement or
>> something similar.
>> 
> 
> I did not consider that someone might want to set the type of a variable at
> runtime because
> I can not see any pratical usages for that, imho you change a variable type
> into another one
> because you want to work with that specific type. But it basically boils
> down to the same issue
> as with gettype that without it you need to do a switch statement to get
> something similar.
> 
> 

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');
        // ...
    }
}
?>

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?

—Claude


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

Reply via email to