次のコードがあります。
<?php
function s2int($pinned_id) {
$action="aaa";
if ( $action && is_numeric($pinned_id) && (float)$pinned_id==(int)$pinned_id) {
/**
* @param [string] $action is setted
* @param [int/string as int] $pinned_id is setted
*/
echo "-chekpoint- $pinned_id\n";
$pinned_id = (int)$pinned_id;
}
else { echo "-passpoint- $pinned_id\n";}
return $pinned_id;
}
echo s2int("000010")."\n";
echo s2int(10.00001)."\n";
echo s2int(10)."\n";
echo s2int("10")."\n";
echo s2int("0")."\n";
echo s2int("a")."\n";
echo s2int("a10")."\n";
echo s2int("10a")."\n";
echo s2int("0x1A")."\n";
echo s2int("-100")."\n";
出力:
-chekpoint- 000010
10
-passpoint- 10.00001
10.00001
-chekpoint- 10
10
-chekpoint- 10
10
-chekpoint- 0
0
-passpoint- a
a
-passpoint- a10
a10
-passpoint- 10a
10a
-chekpoint- 0x1A
0
-chekpoint- -100
-100
期待される出力:
-chekpoint- 000010
10
-passpoint- 10.00001
10.00001
-chekpoint- 10
10
-chekpoint- 10
10
-chekpoint- 0
0
-passpoint- a
a
-passpoint- a10
a10
-passpoint- 10a
10a
-passpoint- 0x1A
0x1A
-chekpoint- -100
-100
s2int が正しい (int) 変数を返すようにし、変数を (int) に変換できない場合にアクションを実行するためのベスト プラクティスは何ですか (入力が 16 進数の場合に予期しない結果が表示されるため)。