2017-12-03 119 views
-1

我很好奇爲什麼PHP中的「包含」論壇如此複雜?爲什麼PHP沒有簡單的包含字符串函數?

我在學習一種叫做Lasso的不太常用的語言。 PHP和Lasso非常相似。

一件事套索有這非常好的是包含字符串函數>>

if($myVar >> 'x') // this is a contains statement 

是否有更簡單的方法比:

if(strpos($a, 'are') !== false) 

這似乎像一個雙重否定。爲什麼不==真?這可能是我遇到的最令人困惑的事情。我希望有人能夠點亮一些光芒!

編輯:我認爲我的問題的答案是沒有其他包含的快捷方式代碼。感謝大家的幫助。

+0

看出什麼毛病'如果(strpos($ A, '是')> = 0){回聲 '發現'; }'? – Camilo

+1

相關:https://stackoverflow.com/questions/4192025/strpos-issue-with-0-false – mickmackusa

+1

@Camilo當'strpos'返回'false'意思是「找不到」時,你的代碼會說「found」,因爲' 0 == false在PHP中是正確的。嘗試運行'$ a ='nope'; if(strpos($ a,'are')> = 0){echo'found'; ''看看。 – ceejayoz

回答

1

應當指出的是,strpos會做包含一個__toString()方法的對象字符串轉換

如本

//Enter your code here, enjoy! 

class foo{ 

    public function __toString(){ 
     return 'hello world'; 
    } 
} 

$Foo = new foo; 

echo strpos($Foo, "world"); 

。OUPUTS

6 

誠然這是一個非常不可能的情況在這種情況下,但我認爲這值得一提。

在本sandbox

2

由於文檔說:

這個函數可以返回布爾值FALSE,但也可能返回的結果爲FALSE的非布爾值。

返回將針存在相對於乾草堆字符串的開頭(獨立的偏移)的位置。還要注意的是字符串位置從0開始,而不是1

你不能這樣做,因爲== true可以strpos返回0如果發生第0指數在字符串(即字符串的開始),這將由於0是false-y值,因此檢查== true失敗。

TL; DR:strpos不是「包含」功能,這是一個「什麼是字符串的位置」功能,可以使用作爲一個「包含」功能的結果。

+0

如果它不是基於0的索引,那麼與其他語言中的大多數其他語言相比,這會造成混淆。這個問題來自PHP的鬆散類型本質。但PHP主要用於Web,並且從Web提交的任何數據都是字符串類型。如果PHP是強類型的,那麼在類型轉換數字中會涉及更多的工作,哪些不是。說實話,80%的網頁設計並不涉及做需要數字的計算。 – ArtisticPhoenix

相關問題