[PHP-users 29526] substr_compare() で部分文字列を比較すると警告が発生する

こやま puyoumailaddress @ yahoo.co.jp
2006年 6月 27日 (火) 18:59:24 JST


お世話になります。こやまです。

subjectにあるように、「substr_compare()」で発生する警告について、
警告が発生する理由が分からないため、ご教授いただきたく思います。
次のように比較を行うと、「The start position cannot exceed initial
tring length」と警告が発生します。
  echo substr_compare("ab", "ac", 0, 2);

次のように行うと、警告は発生しません。
  echo substr_compare("abc", "ac", 0, 2);

substr_compareの説明を調べると、次にようにありました。
-----引用
  offset が main_str の長さ以上であり、かつ length が設定されている
  場合、substr_compare() は警告を 表示して FALSE を返します。 
-----例題
  echo substr_compare("abcde", "abc", 5, 1); // 警告

例題にあるように、比較開始位置が文字列のインデックスを超えると、
警告が発生すると理解したのですが、「部分文字列比較」なので、
main_strの長さが lengthと同じ場合は、「部分文字列比較」を
行ってはならないのでしょうか?

次のようにすると、警告が発生せずにsubstr_compare()と同じ結果を
得ることができます。
  echo strncmp(substr("ab", 0, 2), "ac", 2);

[環境]
PHP 5.1.4
OS RHEL 4

よろしくお願いいたします。


PHP-users メーリングリストの案内