Aynı sınıftaki yöntemler veya değişkenler başvururken Neden PHP $ bu kullanım gereklidir?

5 Cevap php

Onun yöntemi çağrısı çalışma değildi neden bir Java geliştirici açıklayan edildi. O sadece eklemek için gerekli $this->method_name();

Aynı sınıfta bildirilen olduğunda o da yöntemine, "Why do I need to add $this sordu? "

Ben gerçekten nasıl cevap bilmiyordum. PHP genel bir ad alanı vardır ve açıkça aradığınız yöntem geçerli sınıfa ait olduğunu söylemek gerekir çünkü Belki bu kadar? Ama sonra neden genel ad bakarak ÖNCE yöntemi için geçerli sınıfını kontrol PHP değil?

5 Cevap

Sorun, bir function foo() beyan ve eğer bir yöntem foo(), php sen geliyordu bulmaktan zor bir zaman var olacağını olurdu - Bu örneği göz önünde bulundurun:

<?php
function foo()
{
    echo 'blah';
}

class bar
{
    function foo()
    {
         echo 'bleh';
    }
    function bar()
    {
         // Here, foo() would be ambigious if $this-> wasn't needed.
    }
}
?>

Yani temelde bu PHP söyleyebiliriz - (çünkü siz de fonksiyonlar dışında sınıfları olabilir yani) onun "non-% 100-nesne-merkezlilik" ve - bu "özelliği" vardır :)

Bu alternatiflere göre daha kolay olduğu için: sanırım varsa. PHP nesne yönelimli destek daima kesmek çok olmuştur. Ben hayal meyal PHP 5.3 görünecektir yaklaşan kapatma desteği ile ilgili bir tartışma okuduğumu hatırlıyorum. Anlaşılan o nedeniyle kurallar kapsam oluyor PHP sözcüksel kapakları uygulamak için gerçekten çok zordu. Muhtemelen yuva gibi başka sınıf ve malzeme bir işlevi bir sınıf olabilir çünkü. Tüm bu özgürlük muhtemelen bu inanılmaz zor gibi şeyler yapar.

Bu alışılmadık bir durum değildir. Python, Javascript, Perl (ve diğerleri) tüm nesneleri ile uğraşırken bir this veya self başvurmasını sağlayabilirsiniz.

Bu kapsam PHP böyle çalıştığını. $obj->f() işlev kapsamındaki $foo anlamına gelir. Eğer f() içindeki sınıf özelliği $obj->foo almak istiyorsanız, bu $this->foo.

global $foo;
$foo = 99;

class myclass
{
	public $foo;

	function f()
	{
		$this->foo = 12;
		$foo = 7;

		// $this->foo != $foo != $GLOBALS['foo']
	}
}

$ This çağıran nesneye başvurur. PHP docs iyi örnekler ve başka detayları var.