PHP类型杂耍和减量运算符

PHP类型杂耍和减量运算符,php,type-conversion,decrement,Php,Type Conversion,Decrement,我正在使用PHP中的for循环和CLI。我对减量运算符(--)有问题。下面是我的代码 <?php $handle = fopen("php://stdin","r"); $str = fgets($handle); for($i=$str; $i>0; $i--){ var_dump($i); } 但如果我显式地将cast cli参数键入int,它就可以工作 <?php $handle = fopen("php

我正在使用PHP中的
for循环
CLI
。我对减量运算符(--)有问题。下面是我的代码

<?php

    $handle = fopen("php://stdin","r");
    $str = fgets($handle);
    for($i=$str; $i>0; $i--){   
        var_dump($i);
    }
但如果我显式地将cast cli参数键入
int
,它就可以工作

<?php

    $handle = fopen("php://stdin","r");
    $str = (int)fgets($handle);
    for($i=$str; $i>0; $i--){   
        var_dump($i);
    }
我是否做错了什么,或者键入杂耍无法使用减量运算符(有意)?因为它似乎可以使用如下所示的增量运算符(++)


从文件中获取的
$str
中有一个换行符:

string(2) "3
"
因此字符串的ascii字符是
#51
(12月ascii代码表示字符“3”)和
#10
(12月ascii代码表示换行符)。 如果使用减量运算符
i--
,字符串将变为
#51#09
。下一次迭代将其更改为
#51#08

第一个字符不会更改,因为第二个字符将递减。这就是为什么看起来没有递减的原因

解决方案:

如果你改变

$str = fgets($handle);

换行符、制表符等将被删除,以使减量运算符减量字符
#51

<?php

    $handle = fopen("php://stdin","r");
    $str = fgets($handle);
    for($i="1"; $i<=$str; $i++){    
        var_dump($i);
    }
john@doe:/var/www/html/rank$ php 1.php
3
string(1) "1"
int(2)
int(3)
john@doe:/var/www/html/rank$
string(2) "3
"
$str = fgets($handle);
$str = trim(fgets($handle));