Erişim sınıfı yöntemleri arasındaki fark

5 Cevap php

Düne kadar olsa o özdeş bir sınıf erişmek için bu yöntemlerin her ikisi de. Google (ya da benim anahtar kelimeler ya da kötü) belirterek yukarıya çıktı. Yerine sadece doğrudan sınıf yöntemlerini çağırarak daha sınıfının yeni bir örneğini tanımlayarak bir sınıf erişen arasındaki fark nedir.

Ben hiç Ben sadece bir ipucu yok çünkü ben soruyorum, soruyorum ama bana yardım için birkaç örnek vermek için izin anladım.

Sürece ben PHP sınıfları kullanarak edilmiştir olarak ben sınıfı o değişkeni yöntemleri erişen bir örneğini tanımlayan olmuştur. İşte bir örnek:

<?php
class Myclass
{
   public function my_method() {
      return "This is my method"; 
   }
}
$myclass = new Myclass();

echo $myclass->my_method(); // output: This is my method
?>

Bu ve bunu yaparken arasındaki fark nedir?

<?php
class Myclass
{
   public function my_method() {
      return "This is my method";
   }
}

echo Myclass::my_method(); // output: This is my method
?>

Ben yeterince açık olduğunu umuyoruz. "Myclass:,", $ class-> MyMethod () "veya sadece doğrudan gibi pek yöntemini çağırarak - değil kısa bir özetine olurdu O zaman ne ile sınıfının bir yöntemi çağıran bir sınıfın yeni bir örneğini oluşturma arasındaki fark :: MyMethod (); "?

Teşekkürler gelişmiş.

5 Cevap

İlk olarak, bir sınıf ve bir nesne, ya da bir sınıf ve bir sınıfın bir örneğine arasındaki farkı anlamak gerekir.

Sınıf "Circle" nerede Örneğin, bir örnek "bu özel daire" olabilir. Sınıf Çember üyeleri $ merkezi ve yarıçapı $ olabilir - her noktasında bu vardır. Ancak bu değerleri her nokta için farklıdır.

$class->mymethod() örneği $ daire-> Uzunluk için bir örnek yöntemi için bir çağrı, () 'dir. Bir nesnenin belirli bir örneğine bir şey söylüyor. Değişkenler anına ait - Bu yöntem, sınıf üyelerinin erişimine sahip olacaktır. PHP Eğer anahtar $this kullanarak bu örnek değişkenleri erişmek.

Örneğin $circle->Length() return 2*Pi*$this->radius olarak uygulanan olabilir;

Eğer Çember :: Boy derken ne) (olur? Hiçbir şey. Bu çağrı için sözdizimi static methods. Eğer demedim çünkü hangi daire. Bir sınıf olarak daire uzunluğa sahip değildir.

Statik yöntem, statik anahtar kelime ile ilan edilir. O sınıfın herhangi örneklerine erişime hiçbir vardır yapar ne olursa olsun. Bir bütün olarak bir sınıf yaptığı şey.

Aslında bir yaratmadan çemberin uzunluğunu hesaplamak istiyorsanız Örneğin, o sınıf daire static function calculateLength($radius) olabilir. Ve Circle::calculateLength($myRadius) olarak diyebileceğim

Eğer statik olmayan olanları anlamak kadar bence sen bile statik yöntemleri hakkında düşünmek gerekir.

:: Notasyonu olarak statik işlevini çağırmak için kullanılır. Daha fazla bilgi için PHP kılavuzunda bu sayfalarına bakın:

Özünde, statik işlevleri sadece normal fonksiyonları dışında sınıflar gibidir. Fonksiyonu gibi çağrıldığında nesne bağlamında değil, yani sözde değişken $this kullanılamaz.

Eğer gibi diyorlar planlıyorsanız fonksiyon static olarak ilan edilmesi gerektiğini unutmayın:

class SomeClass {

    static public function StaticFunction() {
        ...
    }

}

http://www.php.net/manual/en/language.oop5.paamayim-nekudotayim.php

Ben bu şekilde yöntemlerini çağırabilir sanmıyorum. Sanırım bu sınıfın statik üyeleri adlandırılan nasıl olduğunu düşündüm.

Eğer bir nesne oluştururken sınıfının bir örneğini oluşturmak ve böylece bu nesneden yöntemler / özellikler diyoruz benim anlayış.

Eğer statik bir çağrı yoluyla bir yöntem / özellik çağırdığınızda size sınıfın kendisi çağırıyoruz.

Eğer böyle bir şey varsa, yani:

class acs {
    public $var = 'bla';        
}

ve daha sonra bunu

$a = new acs();
$b = new acs();

echo $a->var . '<br>';
echo $b->var . '<br>';

$a->var = 'hey';
$b->var = 'Yooo';

echo $a->var . '<br>';
echo $b->var . '<br>';

Şimdi aynı değerler ile başlayan sınıf acs 2 örneği var ama şimdi farklı değerlere sahiptir.

Ama bu varsa:

class acs {
    public static $var = 'bla';     
}

Ve sonra yapın:

$a = new acs();
$b = new acs();

echo $a->var . '<br>';
echo $b->var . '<br>';


$a->var = 'hey';
$b->var = 'Yooo';

echo $a->var . '<br>';
echo $b->var . '<br>';

echo acs::$var;

Ne yapıyorsun olduğunu:

  • Siz de daha önce örneklerini oluşturun.

  • Kamu malı var yok, çünkü hiçbir yankı.

  • Sen her iki örnekte de ortak özelliği VAR oluşturmak

  • Sen kendi değerlerini (hey ve Yoo) echo

  • Sen ('bla' ve değişmedi) statik özelliği VAR echo

Bu yardımcı olur umarım!