Başka bir sınıf için bir sınıf nesnesi geçirmek için tamam mı?

4 Cevap php

Benim ilk nesne fabrika kodlama yaşıyorum ve orada varsa ben ikinci nesnesi oluştururken başka içine bir nesne geçen herhangi bir sakıncaları merak ediyorum, ve daha sonra kullanılmak üzere saniye içinde ilk nesneyi tasarruf?

Örnek:

class main
{
    public $connection = array();

    // various other useful functions that should be loaded on every page here
    // these other functions would be convenient to have avail for 
    // new objects in different classes

    function dbconnect($db) {
        if(!isset($this->connection[$db])) {
            switch($db) {
                case "users":
                    $connection = @mysql_connect(info,info,info);
                    $db_select = @mysql_select_db(info,$connection);
                    $this->connection[$db] = $connection;
                break;

                case "ads":
                    $connection = mysql_connect(info,info,info);
                    $db_select = mysql_select_db(info,$connection);
                    $this->connection[$db] = $connection;
                break;

                default:
                    die($db . " is not a recognized database.");
                break;
            }
        }

        return $this->connection[$db];
    }

    // note how i pass $this into the new object in this function
    function create($class,$params=null) { 
        if(!class_exists($class) && !$this->load($class)) {
                die($class . " is not a recognized class.");
        }else{
                return new $class($this,$params);
        }
    }

    function load($file) {
        $file = $_SERVER['DOCUMENT_ROOT'] . "/classes/" . $file . ".class.php";
        if(file_exists($file)) {
                return require_once($file);
        }else{
                return false;
        }
    }
}

class secondary {

    private $connection;
    private $mainObj;
    private $params;

    function __construct($mainObj,$params) {

        $this->mainObj = $mainObj;
        $this->params = $params;

        $this->connection = $mainObj->dbconnect('users');

    }
}

Burada gördüğünüz gibi, fabrika tarafından oluşturulan herhangi bir sınıf elverişli sınıf küresellerle kullanmak zorunda kalmadan ... onu (ve diğer ortak / kullanışlı fonksiyonlar) gerektiriyorsa MySQL db bağlanmak, ya da içeri birçok şeyi geçmek yeteneğine sahiptir

Bu istikrarlı bir yolu var mı? Ben yeni duyuyorum, ve bu yanlış neden bazı iyi teori / okulunu kullanabilirsiniz - bu ise.

4 Cevap

Evet, oldukça istikrarlı bir yoldur. Ama sınıflar güçlü yazdığınız kılacak, type hinting parametre olarak dış örneklerini alarak yöntemleri görmek istiyorum.

Örnek;

class Alob {
    public function aMethod(**Blob** $outerObject) {
        ...
    }
}

class Blob {
    ...
}

Alob :: aMethod () Blob'a başka bir türüyle çağrılırsa, bu bir ölümcül hata atmak olacaktır.

Ben de, görünürlük tanımlanması için daha fazla erişimci anahtar kelimeleri görmek istiyorum böylece 'özel' ve sınıf erler gizlemek istiyorum.

Kesinlikle nesne geçmesiyle birlikte yanlış bir şey. Eğer çalışması için ClassA bir örneklenmiş nesne ihtiyacı ClassB nesne varsa, o zaman tek seçenek ClassB içinde ClassA nesne, ya da içeri Classa geçmek için bu oluşturmak için vardır

ClassA nesne daha sonra Classa (yani veritabanı bağlantı nesnesi) geçen, örnekteki gibi, birden ClassB nesneler tarafından kullanılması olasılığı varsa etrafında bir sürü içerecektir alternatif, daha more verimli aslında Her sınıf içinde oluşturulan yinelenen nesneleri.

PHP5 otomatik için secondary sınıf içinde bir başvuru kurarak referans nesneleri geçtiğinden $mainObj aslında çok verimli olduğunu.

One this you'll have to be careful with, with that solution of keeping an object accessing the DB (which is not bad ; you should read about the "Dependancy injection" pattern, btw), is to not disconnect from the DB as long as you still need to be able to access it
(Yeah, seems pretty logical ^^ )

Demek istediğim bazı nesne yere kapalı değil DB bağlantısı ihtiyacı olduğunu unutmak kolay hale gelebilir olduğunu.

Kolay bir şekilde kesmek asla olurdu - PHP otomatik olarak zaten, yazısının sonunda DB sunucusuna bağlantıyı kapatır.

Bu tamam, ama aslında OOP taşlarından biri, ve aggregation denir Sadece