新手請教一個關於class的問題

WBOY
發布: 2016-09-15 11:31:00
原創
1172 人瀏覽過

下面兩種呼叫類別中方法的方式有什麼差別呢?

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>
登入後複製

只是為了呼叫的時候少寫幾行程式碼。無所謂好壞,要看具體情況。

此外,單件模式的物件中也較常見靜態方法,根本原因同上,不具體解釋了。

相關標籤:
php
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板