PHP5: statik vs const

5 Cevap php

PHP5 kullanarak const ve static arasındaki fark nedir? Ne zaman her uygundur? Ve hangi rolü public, protected ve private oynuyor - varsa.

5 Cevap

Bir sınıfın bağlamda, statik değişkenler sınıf kapsam (değil nesne) kapsamı vardır, ama bir const aksine, onların değerleri değiştirilebilir.

class ClassName {
    static $my_var = 10;  /* defaults to public unless otherwise specified */
    const MY_CONST = 5;
}
echo ClassName::$my_var;   // returns 10
echo ClassName::MY_CONST;  // returns 5
ClassName::$my_var = 20;   // now equals 20
ClassName::MY_CONST = 20;  // error! won't work.

Kamu, korumalı ve özel (her zaman halka açık) consts açısından alakasız; bunlar statik değişkeni dahil sınıf değişkenleri, sadece yararlıdır.

  • public static değişkenler ClassName :: $ değişkeni üzerinden her yerde ulaşılabilir.
  • protected static değişkenler ClassName :: $ değişkeni üzerinden tanımlayan sınıf veya uzanan sınıflar tarafından erişilebilir.
  • özel statik değişkenler ClassName :: $ değişkeni üzerinden sadece tanımlayarak sınıfı tarafından erişilebilir.

Yapılması gereken son nokta const her zaman statik ve kamu olmasıdır. Bu yüzden gibi sınıf içinde const erişebileceğiniz anlamına gelir:

class MyClass
{
     const MYCONST = true;
     public function test()
     {
          echo self::MYCONST;
     }
}

Sınıfın dışında bu gibi erişmek olacaktır:

echo MyClass::MYCONST;

Istatistiksel sınıf örneğinin gerek kalmadan bunları erişilebilir kılan bir sınıf yöntemi ya da mal beyanında.

A sınıfı sabit normal bir sabiti gibi, zamanında değiştirilemez edilir. Bu aynı zamanda şimdiye const kullanacağınız tek nedeni budur.

Özel, kamu ve korumalı hangi parametre / yöntemi erişebilirsiniz kim açıklanır erişim değiştiricileridirler.

Public means that all other objects gets access. Private means that only the instantiated class gets access. Protected that the instantiated class and derived classes gets access.

Eğer ilan ettikten sonra onun değerini değiştiremezsiniz yani Constant, sadece bir sabittir.

Static değişken bir sınıfın bir örneğini yapmadan erişilebilir ve bu nedenle bir sınıfın tüm örnekleri arasında paylaşılan.

Ayrıca, sadece bir kez (bir fonksiyonun ilk yürütme) ilan edilir ve fonksiyon çağrıları, örneğin arasındaki değerini saklayabilirsiniz bir işlevi bir static yerel değişken olabilir:

function foo()
{
   static numCalls = 0;
   numCalss++;
   print("this function has been executed " . numCalls . " times");
}

Yani Matt büyük cevap @ üzerinde tekrarlamak için:

  • sabitleri bir seçenek değildir bu yüzden çoğu durumda bir özel / Korumalı Statik özelliği gerekir.

  • İhtiyacınız özelliği değişti kamuya açık değil olması gerekiyordu ise, sabit bir doğru seçimdir.

Örnek:

class User{
    private static $PASSWORD_SALT = "ASD!@~#asd1";
    ...
}

class Product{
    const INTEREST = 0.10;
    ...
}