Referans ve Yazma

2 Cevap php

I var:

class A{

    public $name = 'A';
    public $B;

    public function B_into_A($b)
    {
        $this->B = $b;
    }
}

class B{

    public $name = 'B';
    public $A;

    public function new_A_into_B($a)
    {
        $this->A = new $a;
    }
}

$a = new A;
$b = new B;
$a->B_into_A($b);
$b->new_A_into_B('A');

Is this a good way to insert another class inside a "main" class at the beginning of the runtime? Should I use references?

(Arka plan: Ben şu anda bazı ana sınıfları örneğin önyükleyici, sarıcı, modüller, adaptör vs içinde birçok sınıfları işlemek zorunda olduğu bir MVC framework üzerinde çalışmak)

2 Cevap

Hayır ve evet ..

İlk işlev çağrısı ince, ben sadece daha standart bir isim kullanabilirsiniz:

$a = new A;
$b = new B;
$a->setB($b); // B_into_A is a little bit of a whacky function name

(Eğer factory çeşit arıyorsanız sürece) ikinci çağrı, gerçekten bir dize geçmek ve ardından nesne oluşturmak için mantıklı değil. İsterseniz B A kendi:

$b->new_A_into_B( new A );

public function new_A_into_B($a)
{
    $this->A = $a;
}

Yine ben adını sevmiyorum .. Id muhtemelen setA() orada yanı sıra ile gitmek.

O artık ihtiyaç olmadığı zaman tahmin çöp toplayıcı için kolaydır çünkü yerine, sınıf adının bir nesne Passing mantıklı.

<?php

class A {
    public $B;
}

class B {
    public $A;
}

$a = new A;
$b = new B;

$a->B = $a;
$b->A = $b;

Ayrıca, ben ayarlayıcı yöntemleri kurtulmak için denemek istiyorum. Uygulamada sağladıkları sadece parası girişini doğrulamak için. Burada durum değil çünkü, ben doğrudan sınıflarını atamak tavsiye ediyorum.

Siz "Ben başvuruları kullanmalı mıyım?" Diye sordu. Aslında tüm nesneler PHP5'ta beri başvuruya göre iletilir. Bunların tam bir kopyasını elde etmek için tek yol clone anahtar kelime kullanmaktır.

Bu arada, her nesnenin içinde sınıf adını saklamak gerekmez. Sadece get_class () kullanın.