Bir sınıf içinde statik bir yöntem çağırmak?

2 Cevap php

nasıl ben aynı sınıf içinde başka bir yöntemle statik bir yöntem diyveyasunuz?

$this->staticMethod();

veya

$this::staticMethod();

2 Cevap

Kullanıcının bu sınıf varsayalım:

class Test
{
    private $baz = 1;

    public function foo() { ... }

    public function bar() 
    {
        printf("baz = %d\n", $this->baz);
    }

    public static function staticMethod() { echo "static method\n"; }
}

foo() yöntemi içinde, en farklı seçenekler bakalım:

$this->staticMethod();

Yani doğru, staticMethod() örnek yöntemi olarak çağırır? Öyle değil. Yöntemi public static tercüman statik bir yöntem olarak arayacak olarak ilan edilir, bu nedenle beklendiği gibi çalışacak olmasıdır. O bunu yaparken, statik bir yöntem çağrısı yer alıyor koddan daha az belirgin hale söylenebilir.

$this::staticMethod();

PHP 5.3 beri $var::method() <class-of-$var>:: anlamına kullanabilirsiniz; Yukarıdaki kullanım durum hala oldukça sıradışı olsa bu, oldukça uygundur. Yani bu bir statik yöntemi çağırmak en yaygın şekilde bize getiriyor:

self::staticMethod();

Eğer :: the statik çağrı operatörü olduğunu düşünmeye başlamadan önce Şimdi, ben size başka bir örnek vereyim:

self::bar();

Bu $this->bar() ve self::bar() tam olarak aynı şeyi yapmak anlamına gelir ki, baz = 1 basacaktır; :: sadece bir kapsam çözünürlük operatörü çünkü. Bu parent::, self:: ve static:: çalışması yapmak ve statik değişkenlere erişim sağlamak için var; yöntem denir nasıl onun imza bağlıdır ve arayan denirdi nasıl.

, Eylem tüm bu görmek görmek için this 3v4l.org output.