Мне любопытно, почему форум «содержит» так сложен в PHP?
Я изучаю PHP из не очень используемого языка, называемого лассо. PHP и Лассо очень похожи.
У Лассо есть одна замечательная функция: содержит строку >>
if($myVar >> 'x') // this is a contains statement
Есть ли более простой способ, чем:
if(strpos($a, 'are') !== false)
Это почти похоже на двойной негатив. Почему нет == Правда? Это, наверное, самая запутанная вещь, с которой я столкнулся. Я надеюсь, что кто-то может пролить свет!
РЕДАКТИРОВАТЬ: я думаю, что ответ на мой вопрос, нет другого ярлыка кода для содержит. Спасибо всем за помощь.
Следует отметить, что strpos
будет выполнять преобразование строк на объектах, которые содержат __toString()
метод
такой как этот
//Enter your code here, enjoy!
class foo{
public function __toString(){
return 'hello world';
}
}
$Foo = new foo;
echo strpos($Foo, "world");
Выходы
6
Конечно, в данном случае это действительно маловероятный сценарий, но я подумал, что стоит упомянуть.
Как видно из этого песочница
Как говорят в документах:
Эта функция может возвращать логическое значение FALSE, но также может возвращать и не булево значение, которое оценивается как FALSE.
а также
Возвращает положение, в котором находится игла, относительно начала строки стога сена (независимо от смещения). Также обратите внимание, что строковые позиции начинаются с 0, а не с 1.
Ты не можешь сделать == true
так как strpos
может вернуться 0
если строка встречается в 0-м индексе (то есть в самом начале строки), что приведет к ошибке == true
проверить как 0
является ложным значением y
TL; DR: strpos
это не функция «содержит», это функция «какова позиция строки», которая может быть используемый как «содержит» функцию в результате.