PHP Kapsam Çözünürlük Operatör Soru

2 Cevap php

Ben yöntemleri çağrı MyClass::function(); tarzı ile sorun yaşıyorum ve neden bilemiyorum. İşte bir örnek (I btw Kohana framework kullanıyorum) var:

    class Test_Core
 {
  public $var1 = "lots of testing";

  public function output()
   {
    $print_out = $this->var1;
    echo $print_out;
   }
 }

Ben onu aramak için aşağıdaki kullanmayı deneyin, ama o kadar tanımlanmamış $ var1 döndürür:

Test::output()

Ancak, bu çalışıyor:

  $test = new Test(); 
  $test->output();

Ben genellikle "yeni sınıf" tarzı karşıt olarak nesneleri çağırarak bu stili kullanabilirsiniz, ama çalışmak için istemiyor, neden ben çözemiyorum.

2 Cevap

Bu kullanma:

Test::output()

Eğer statik biri olarak yöntemini çağırarak - ve hiçbir örneği yok gibi statik yöntemler, örnek özelliklerine erişimi yok.

Eğer bir özelliği kullanmak istiyorsanız, bir nesneyi almak için, sınıf instanciate gerekir - ve bu nesne üzerinde yöntemleri çağırır.


A couple of links to the manual, as a reference :


Quoting the last page I linked to :

Because static methods are callable without an instance of the object created, the pseudo-variable $this is not available inside the method declared as static.

Ve:

Calling non-static methods statically generates an E_STRICT level warning.

Örneğin çağrı Statik vs çağrı. Sen bu temel OOP kavramları kavramak için isteyeceksiniz. De static anahtar sözcüğü bir okuma var:

http://www.php.net/manual/en/language.oop5.static.php