下面兩種呼叫類別中方法的方式有什麼差別呢?
1
<code>class MyClass { public function myfunc() { // ... } } $myclass = new MyClass; $myclass->myfunc();</code>
2
<code>class MyClass { public static function myfunc() { // ... } } MyClass::myfunc();</code>
一個是將它先實例化再進行調用,另一個是直接聲明靜態方法並直接調用。這兩個有什麼差別呢?應該分別在什麼情況下使用呢?
下面兩種呼叫類別中方法的方式有什麼差別呢?
1
<code>class MyClass { public function myfunc() { // ... } } $myclass = new MyClass; $myclass->myfunc();</code>
2
<code>class MyClass { public static function myfunc() { // ... } } MyClass::myfunc();</code>
一個是將它先實例化再進行調用,另一個是直接聲明靜態方法並直接調用。這兩個有什麼差別呢?應該分別在什麼情況下使用呢?
通俗理解就是:
第一種可以用$this->a; self::$a; static::$a; $this->a(); self::a(); static::a()
等方式取得目前類別的相關資料及方法
第二種則只能用self::$a; static::$a; self::a(); static::a()
等方式取得目前類別的相關靜態資料及靜態方法
static
裡面就不能用this咯,因為目前物件並沒有被實例化。
如果一個物件 a) 有一個工具型的方法且 b)不依賴該物件的實例 那麼最適合使用靜態方法。
但是實際開發中,a) 的權重更高,即如果可能的話,對於一個確實廣泛使用的工具型方法,開發者可能會使用各種辦法使它靜態化,比如
<code>public static function getTotal(array $numbers) { $self = new self(); return $self->getTotalNumber($numbers); }</code>
只是為了呼叫的時候少寫幾行程式碼。無所謂好壞,要看具體情況。
此外,單件模式的物件中也較常見靜態方法,根本原因同上,不具體解釋了。