Объясните синтаксис этой функции - PullRequest
2 голосов
/ 03 августа 2011
function StringCount($searchstring, $findstring)
        {
            return (strpos($searchstring, $findstring) === false ? 0 :  count(split($findstring, $searchstring)) - 1);
        }

возвращает количество вхождений подстроки в строку, но почему бы просто не использовать count?

Что значит === false ? 0 : Я имею в виду, как это называется его нет, или если есть способ назвать этот тип письма?

Ответы [ 4 ]

1 голос
/ 03 августа 2011

Это тип тернарного оператора (то есть требуется 3 операнда), и он является краткой формой предложения if then else.

a ? b : c может быть расширен как:

if(a)
{
   b
}
else
{
   c
}

По сути, это что-то вроде этого:

$strPos;
if (($searchstring, $findstring) === false) 
{
   $strPos=0 
}
else
{
   $strPos=count(split($findstring, $searchstring))
}

return strpos ($ strPos-1);

1 голос
/ 03 августа 2011
0 голосов
/ 03 августа 2011

Это троичное условие

Если strpos($searchstring, $findstring) ложно, то 0, иначе count(split($findstring, $searchstring)) - 1

Так что если $findstring НЕ найдено в$searchstring, return 0

Причина, по которой вам нужно 3 = для этого ложного утверждения: strpos возвращает целое число, где была найдена игла в стоге сена.Покупая с помощью ===, вы получаете логическое значение.

0 голосов
/ 03 августа 2011

Поскольку strpos возвращает логическое значение FALSE, но может также возвращать не логическое значение, которое оценивается как FALSE, например 0 или "".

Хорошим примером является то, что StringCount ("stackoverflow", "stack") вернет 0, если

function StringCount($searchstring, $findstring)
{
  return (strpos($searchstring, $findstring) == false ? 0 : count(split($findstring, $searchstring)) - 1);
}
...