2016-09-11 3 views
-3

MagentoがPHPで(int)の型キャストを使用したため、私は3時間の人生を無駄にしました。公平になるためには、型キャストはその部分で公正ではありません...私の午後を台無しにした通訳者の予期せぬ動作であるようです。Bogus PHP(int)型キャストの動作ですか?

$sString = '123 Sesame Street'; 
$iNumber = (int)$sString; 
var_dump($iNumber); // int(123) 

これは意図的なものですか?明らかに、それはis_numericチェック・フロントで捕まえることができますが、本当ですか?

+0

おかげで...私は答えをPHPでバグを報告します! – quickshiftin

+2

From docs: '値は文字列の最初の部分で与えられます。文字列が有効な数値データで始まる場合、これは使用される値になります。これは文書化されています。私はあなたにdownvoteをしなかったが、約5秒でこれを見つけた可能性がある。 –

+0

あなたは正しいです@ N.B。、私は不満から急いでこの質問をし、downvotesに値する。それが文書化されているという事実は素晴らしいですが、その動作自体はまだ偽のIMOです! – quickshiftin

答えて

3

結果はどのようなものでしょうか? (int)は意図した通りに正確に動作します。

あなたがPHP manual documentationを読むために気にしている場合、それは述べている:

値は文字列の最初の部分で与えられます。 文字列 が有効な数値データで始まる場合は、これが使用されます。 それ以外の場合は、値は0(ゼロ)になります。有効な数値データは オプション記号で、その後に1つ以上の数字(任意に の小数点を含む)が続き、その後にオプションの指数が続きます。指数部は で、「e」または「E」の後に1つ以上の数字が続きます。

Emphesis鉱山


そして、これはPHPの種類ジャグリングのように基本的な実現であるので、私は問題は彼らの独自のinterpretionでMagentoのの型の扱いと少なく、よりに位置疑うだろうタイプハンドリング能力。より正確なレスポンスを得るために使用できるMagentoの方が優れています。私はあなたの問題の回避策として、以下の擬似コードをお勧めし

:downvoteのため

if((string)$sString != (int)$sString) { 
    //This string is not a number or not only a number. 
} 
+0

私は悪いですが、ドキュメントのそのページにありました。ちょっとだけ読むのにちょうど必要でした... – quickshiftin

+0

あなたのアップデートには、型キャストにつながるforeachのちょっとした使い方があります。 Magento 2用のパッチを作成中です。 – quickshiftin

+0

@quickshiftin回避策のためにいくつかの疑似コードを追加しました。私はMagentoの開発者がPHPのジャグリングでこのアクティビティを知っていると期待していますが、もちろんその部分は見落とされているかもしれません... – Martin

関連する問題