2013-02-15 81 views
1

在Ruby/Javascript等語言中,可以將對象運算符應用於任何事物。即,你可以在PHP中使用全局方法嗎?

var string = "Pancakes"; 
alert(string.length); 
// 8 

什麼是當一切都在對象中調用?有沒有什麼可以使PHP以這種方式行事,而不必自己破解一些東西?這是PHP社區當前要求的東西嗎?

echo (new String("Hello"))->length()將是很好,甚至"Hello"->length();我甚至會滿足於的能力:

$var = "Hello"; 
echo $var->length; 
+0

我相信PHP在沒有「一起黑客攻擊」的情況下可以做的很少,但這是另一個話題... – sstn 2013-02-15 04:30:45

回答

1

這就是所謂的Object-oriented programming。 PHP支持OOP,但很多語言都是作爲接受參數的平面函數實現的。

如果您想對它們進行操作,您需要定義自己的對象,否則就會被迫使用內置類型(如String)上的strlen()等功能。

+0

不,不,我知道它是OOP。我只是不知道是否有一個特定的名稱能夠調用所有變量的.toString()或.split()而不是爆炸(「\ n」,$ var)或(字符串)$ var .. – Steve 2013-02-15 04:11:54

+0

後者可以說是不是面向對象的,因爲你調用的是函數而不是方法。 – 2013-02-15 04:13:40

+0

@Steve這似乎要麼指[繼承](http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming))或[duck typing](http://en.wikipedia.org/wiki/Duck_typing)(「* all variables *」)。 – 2013-02-15 04:14:11

0

他們稱之爲面向對象編程。 PHP的新版本是OO。您可以使用方法創建類來完成您所指的內容。

1

Java程序員使用術語autoboxing來調用原始值上的方法。 JavaScript也具有此功能,並且它通過創建臨時包裝對象來工作。我不知道Ruby。

在PHP中,這是不可能的。 new String("Hello")->length()也是不可能的,主要是因爲沒有String類與類似length的方法。你可以創建自己的,但它是值得的嗎?此外,您可能對this hack感興趣。

0

面向對象(Object Orientation,OO)是在「事後」之後加入到PHP中的。在實現OO之前,所有事情都是使用函數完成的(就像許多其他類似C語言的編程語言一樣)。

說到PHP,字符串,整數,布爾等等都只是數據。他們是原始類型並且什麼都不能做;它們只是存儲在內存中的命名值。這就是爲什麼你需要使用功能,如strlen($str)。功能的運行值爲

在像Ruby和Javascript這樣的語言中,大多數數據類型,比如字符串,實際上都是實際上的對象(或者在某些情況下,有點像對象)。它們包含各種屬性,如.length,以及方法如.indexOf()。這種數據類型的另一個詞是複合型(它們由多個組成)。

因此,在PHP中,你可以說它是正常的strlen($str)找出一個字符串是多少;同樣,在Javascript或Ruby中,它是正常的來編寫str.length

有可能在PHP中編寫String類,但它有點不重要。就好像學會數到10,但堅持要以7爲基數來完成。這不是很實際,人們會認爲你瘋了。

相關問題