AnDeriensのブログ

個人的なブログです

整数キャストした時の挙動

PHP書いていて、整数キャストした時にちゃんとバグなく動くのか気になったのでちょっと調べてみた。 やっぱ結構緩そうなので、これをどういう型変換にするのがいいか今後検討していきたい。

input

<?php

function to_int($v)
{
    return (int)$v;
}

var_dump(to_int(NULL));
var_dump(to_int(0));
var_dump(to_int(1));
var_dump(to_int(''));
var_dump(to_int('0'));
var_dump(to_int('1'));
var_dump(to_int('a'));
var_dump(to_int(true));
var_dump(to_int(false));
var_dump(to_int(0.1));
var_dump(to_int([]));
var_dump(to_int(['a']));
var_dump(to_int(['a', 'b']));
var_dump(to_int([1, 2]));
var_dump(to_int(new stdClass()));
var_dump(to_int(new stdClass(['a' => 'a'])));
var_dump(to_int(function () {return true;}));

output

$ php integer.php
int(0)
int(0)
int(1)
int(0)
int(0)
int(1)
int(0)
int(1)
int(0)
int(0)
int(0)
int(1)
int(1)
int(1)

Warning: Object of class stdClass could not be converted to int in /Users/anderiens/Dev/php-experiments/integer.php on line 5
int(1)

Warning: Object of class stdClass could not be converted to int in /Users/anderiens/Dev/php-experiments/integer.php on line 5
int(1)

Warning: Object of class Closure could not be converted to int in /Users/anderiens/Dev/php-experiments/integer.php on line 5
int(1)

TODO あとで他の言語も調べる。