php statik işlev

6 Cevap php

Ben php statik işlevi ile ilgili bir sorum var.

Diyelim ki bir sınıf olduğunu varsayalım

class test {
    public function sayHi() {
        echo 'hi';
    }
}

Ben yaparsam test::sayHi(); bir sorun olmadan çalışıyor.

class test {
    public static function sayHi() {
        echo 'hi';
    }
}

test::sayHi(); olarak iyi çalışıyor.

Birinci sınıf ve ikinci sınıf arasındaki farklar nelerdir?

Ne statik bir işlevi hakkında özel nedir?

6 Cevap

Birinci sınıfta, SayHi () aslında statik bir yöntem olarak aradığınız bir örnek yöntemidir ve SayHi () bu $ ifade asla çünkü onunla uzak olsun.

Static fonksiyonlar sınıfından değil sınıfının bir örneği ile ilişkilidir. Gibi, $ bu statik bir çerçevede mevcut değildir ($ this herhangi bir nesneye işaret değildir)

Bütün fark $this statik işlev içinde verilen alamadım olduğunu. Eğer kullanmaya çalışırsanız $this, bir Fatal error: Using $this when not in object context alırsınız.

Peki, tamam, bir diğer fark: bir E_STRICT uyarı ilk örnek tarafından oluşturulur.

Basitçe, statik işlevleri bağımsız ait oldukları sınıfın işlev.

Bu demektir $, bu sınıfın bir amacıdır. Bu statik işlevleri için geçerli değildir.

class test {
    public function sayHi($hi = "Hi") {
        $this->hi = $hi;
        return $this->hi;
    }
}
class test1 {
    public static function sayHi($hi) {
        $hi = "Hi";
        return $hi;
    }
}

//  Test
$mytest = new test();
print $mytest->sayHi('hello');  // returns 'hello'
print test1::sayHi('hello');    //  returns 'hello'

Örnekler (PHP 5.3.5) denedikten sonra, ben tanımlama fonksiyonları her iki durumda da sınıf işlevleri üzerinde çalışmak için $this operatörü kullanamazsınız bulundu. Yani henüz onları bir fark bulamadı. (

Statik yöntemler yaratılan nesnenin bir örneği olmadan çağrılabilir olduğundan, bu yöntem içinde mevcut değildir sözde değişken $ gibi statik ilan etti.

> - Statik özellikler ok operatörünü kullanarak nesnesi üzerinden erişilebilir olamaz.

Statik olmayan yöntemleri çağırmadan statik bir E_STRICT düzeyinde uyarı oluşturur.

Diğer PHP statik değişkeni gibi, statik özellikleri yalnızca bir sabit veya sabit kullanılarak başlatıldı olabilir; ifadeler izin verilmez. Eğer bir tamsayı ya da (örneğin) dizi statik bir özellik başlatmak olurken Yani, bir fonksiyon dönüş değeri, ya da bir nesneye, bir değişken olarak başlatılamadı olmayabilir.

As of PHP 5.3.0, it's possible to reference the class using a variable. The variable's value can not be a keyword (e.g. self, parent and static). PHP.NET

Biz bu fonksiyon statik yöntemi denir bundan sonra kullanıcı $ bu değil var bu fonksiyonda bir sınıf altında bir fonksiyon oluşturduk. Bu demektir $, bu sınıfın bir amacıdır. Bu statik işlevleri için geçerli değildir.