PHP statik işlev içinde Özel üye nasıl erişilir

3 Cevap php

Ben PHP aşağıdaki dersim var

class MyClass
{
  // How to declare MyMember here? It needs to be private
  public static function MyFunction()
  {
    // How to access MyMember here?
  }
}

Ben kullanmak için hangi sözdizimi hakkında tamamen karıştı

$MyMember = 0; ve echo $MyMember

veya

private $MyMember = 0; ve echo $MyMember

veya

$this->MyMember = 0; ve echo $this->MyMember

Birisi bunu nasıl söyleyebilir?

Ben OOPS tür güçlü değilim.

Eğer ilk etapta bunu yapabilir miyim?

Eğer değilse ben statik işlevleri içinde erişebilirsiniz, böylece nasıl üye beyan etmelidir?

3 Cevap

class MyClass
{
  private static $MyMember = 99;

  public static function MyFunction()
  {
    echo self::$MyMember;
  }
}

MyClass::MyFunction();

php kılavuzun oop5 bölümde Visibility ve Scope Resolution Operator (::) bkz.

Bu süper bir geç yanıt ama birisi yardımcı olabilir ..

class MyClass
{
  private $MyMember;

  public static function MyFunction($class)
  {
    $class->MyMember = 0;
  }
}

Bu çalışıyor. Sen özel aydan bu şekilde erişebilirsiniz, ancak $ sınıf olsaydı sadece $ class-> işlevim () dediğimiz gibi sadece, MyFunction sınıfının bir yöntemi yapmak gerekir. Bu statik işlev erişmek ve yineleme aracılığıyla, tüm örneklerini güncellenmesi verebilecek her örneği sınıf yapıcısı olarak eklenen statik bir dizi olabilir ancak. yani ..

class MyClass
{
  private $MyMember;
  private static $MyClasses;

  public function __construct()
  {
    MyClass::$MyClasses[] = $this;
  }

  public static function MyFunction()
  {
    foreach(MyClass::$MyClasses as $class)
    {
      $class->MyMember = 0;
    }
  }
}

Statik yöntemler bir "örnek bağlamında" dışında denir çünkü statik yöntemler içinde, $this kullanarak değişken arayamazsın.

Bu açıkça PHP doc belirtilmiştir.