這裏有兩種不同的範例:面向對象編程(OOP)和程序編程。
在OOP中,函數在數據的上下文中定義,由類封裝;這種功能通常稱爲方法。當在一個對象(例如一個類的實例)上調用一個方法時,它本身就可以訪問該對象的狀態。所以,在你的例子中,strip
已經知道它被調用的是什麼字符串,所以不需要任何額外的參數。只要你的函數自然地運行在一個特定的對象或一組數據上(例如,strip
作用於一個字符串),以這種方式將它定義爲實例方法是明智的。
在過程式編程中,函數是獨立定義數據結構(類),並且必須顯式地傳遞它們要使用的數據。有時這種方法實際上更自然;例如,打印stdout
或類似的一些輸入的print
函數不是與任何特定對象或數據自然關聯的。
大多數現代語言都內置OO功能,因爲它是一個功能非常強大且功能強大的編程範例。 Java和C#等語言鼓勵所有代碼以面向對象的風格編寫。在這些語言中,即使像字符串和浮點這樣的基本數據類型實際上也是對象,並且有它們自己的方法和狀態。在C#中尤其如此,其中全部類型最終從System.Object
(甚至int
和double
)繼承,並且繼承了由此定義的所有通用方法。這被稱爲統一類型層次結構。
另一方面,PHP具有OOP和程序特徵的奇妙混合;它開始作爲一種程序語言的生活,並且OOP僅在第3版中引入(並且僅在非常基本的意義上)。雖然從PHP5開始,它具有相對較好的OOP支持,但其大部分標準庫仍然在程序上實現爲鬆散的函數集合,這些函數會將相關狀態/數據作爲參數傳遞給它們。OOP庫變得更加普遍,但是(例如與mysqli
)。
PHP並不完全是面向對象的。你可以寫它,但PHP本身不是。有些人喜歡稱它爲對象能力。 * /我鴨子的封面* – PeeHaa
當你看更好的語言時,不要看PHP。 – quantum
@PeeHaa:夠公平的;我收回我的評論:) –