我的書問了一個問題:「對象和函數之間有什麼區別?」對象是否接收並返回值?
答案關鍵是說函數是由名稱引用的接收和返回值的語句集合。它表示對象可能有多個函數,稱爲方法;和多個變量,稱爲屬性;全部組合在一個單元中。
不幸的是,這本書沒有說對象是否接收和返回值....所以,他們呢?我試圖找到一個例子。
我的書問了一個問題:「對象和函數之間有什麼區別?」對象是否接收並返回值?
答案關鍵是說函數是由名稱引用的接收和返回值的語句集合。它表示對象可能有多個函數,稱爲方法;和多個變量,稱爲屬性;全部組合在一個單元中。
不幸的是,這本書沒有說對象是否接收和返回值....所以,他們呢?我試圖找到一個例子。
是的,一個對象可以被設置爲可調用的。
class Foo
{
public function __invoke($arg)
{
echo "$arg\n";
}
}
$f = new Foo(); // calls the __construct method if it exists
$f("Hello, World"); // calls the __invoke method.
但並非所有的語言都支持這樣的概念,這不是一種常態。
我看了一些你最近問過的其他問題。請注意,您不能做到這一點:
Foo();
這沒有什麼,因爲Foo
任何意義在這個例子中的一類。
請記住,術語「對象」是指「類」的特定實例(例如,new Foo()
)。
什麼是一些不支持這種語言的語言? –
一個對象的方法是函數,大多數情況下,它就像常規函數一樣工作。不同之處在於方法具有不同的可見性並且可以訪問其對象的屬性而不必讓它們通過。
對不起,但我不明白你的意思是可見性(也許你的意思是範圍)....此外,問題並不是關於方法的返回值,而是關於對象本身的更多信息。不過謝謝你的回答。 –
@Fohsap:可見性是指成員被訪問的能力,而作用域是指代碼塊訪問成員的能力,儘管大多數人會以任何方式說「範圍」。 *例如:變量不在**範圍**(該變量不是**可見**,來自當前範圍)* – netcoder
好的,所以這些似乎是多種方法來區分對象和函數。謝謝你,datasage和netcoder。 –
Upvoted for good beginner question and answer。雖然你已經接受了這個問題的答案,但我覺得好像答案沒有提供理解對象的完整範圍 - 如果你有任何問題,問,社區會盡力幫助你。 –