2011-02-02 17 views
6

için değişkenleri geçirerek ve bu sınıfPHP - Ben OOP öğrenmeye çalışıyorum sınıflara

class boo{ 

    function boo(&another_class, $some_normal_variable){ 
    $some_normal_variable = $another_class->do_something(); 
    } 

    function do_stuff(){ 
    // how can I access '$another_class' and '$some_normal_variable' here? 
    return $another_class->get($some_normal_variable); 
    } 

} 

yaptık ve ben

$bla = new boo($bla, $foo); 
echo $bla->do_stuff(); 

gibi another_class sınıf içinde bu bir yere çağırır Ama yok içinde referans olarak geçemiyor Lütfen

+5

* (referans) * [Sınıfları ve Temelleri Nesneleri] (http: // www .php.net/manual/tr/language.oop5.basic.php) – Gordon

+0

http://docs.php.net/this adresindeki '$ this 'hakkında bilgi edinin! – rik

cevap

12
<?php 
class Boo 
{ 

    private $bar; 

    public function setBar($value) 
    { 
     $this->bar = $value; 
    } 

    public function getValue() 
    { 
     return $this->bar; 
    } 

} 

$x = new Boo(); 
$x->setBar(15); 
print 'Value of bar: ' . $x->getValue() . PHP_EOL; 

do_stuff işlevi içinde $ bla, $ foo erisebilirsin PHP 5, buna gerek yok ve okudum aslında daha yavaş.

Değişkenini sınıfta bildirdim, ancak bunu yapmak zorunda değilsiniz.

+0

Beğen @Logan said - Eğer bazı bilgileri kaydetmek istiyorsanız alt satır - o zaman bunu yerel sınıfa kaydetmeniz gerekiyor. – Mikhail

+4

Battaniyenin "PHP5'de referans olarak geçme" ifadesini kullanmam. Belki de kompozisyon için değil, ama eğer bir diziyi yerinde değiştirmek istersen? Referans olarak geçmek avantajlarına sahiptir. –

+0

Muhtemelen "nadiren * buna ihtiyaç var" demelisiniz. Çoğu durumda, gereksizdir. – zzzzBov

3

PHP'de, kurucular ve yıkıcılar özel isimlerle yazılır (sırasıyla __construct() ve __destruct()). $this-> kullanarak örnek değişkenlere erişin. İşte sınıfının bir yeniden yazma bu kullanmak var: Tamam

class boo{ 

    function __construct(&another_class, $some_normal_variable){ 
    $this->another_class = $another_class; 
    $this->some_normal_variable = $another_class->do_something(); 
    } 

    function do_stuff(){ 
    // how can I access '$another_class' and '$some_normal_variable' here? 
    return $this->another_class->get($this->some_normal_variable); 
    } 

} 
+0

"PHP 5, verilen bir sınıf için bir __construct() işlevini bulamıyorsa, sınıfın adıyla eski stil yapıcı işlevini arar. Etkin olarak, yalnızca uyumluluk sorunları, sınıfın, farklı anlambilim için kullanılan __construct() adında bir yöntem içermesidir. " - [PHP Oluşturucular ve Yıkıcılar] (http://www.php.net/manual/en/language.oop5.decon.php). Gelecekte geriye dönük uyumluluk azaltılabileceğinden, yeni sözdizimini kullanmak hala iyi bir fikirdir. – zzzzBov

+0

@zzzzBov doğru, birilerinin kullanımdan kaldırılmış bir şey kullanmaya başlamasını asla söylemem. IMO bu tarz daha açık. –

+0

Sadece @ Alexandra'nın kodunun neden işe yaradığı konusunda açıklık getirmeye çalışıyordum (ki bu yapıcı için). – zzzzBov

9

, ilk olarak, sınıf adıyla bir yöntemin yerine yeni stil yapıcısı __construct kullanın.

class boo{ 

    public function __construct($another_class, $some_normal_variable){ 

İkinci olarak, belirli soruyu cevaplamak için, sen member variables/properties kullanmak gerekir:

Şimdi
class boo { 
    protected $another_class = null; 
    protected $some_normal_variable = null; 

    public function __construct($another_class, $some_normal_variable){ 
     $this->another_class = $another_class; 
     $this->some_normal_variable = $some_normal_variable; 
    } 

    function do_stuff(){ 
     return $this->another_class->get($this->some_normal_variable); 
    } 
} 

, biz $this-> öneki sayesinde referans onları sınıfın içinde üye değişkenleri için unutmayın. Bu özellik, sınıfın bu örneğine örneğine bağlı olduğundan. Yani sen $ bu kullanarak sınıftaki değerleri yakalamanız gerekir için ...

1

aradığınız ne:

$this->foo = $some_normal_variable 
İlgili konular