PHP __ Oluşturucu &

5 Cevap php

Ben PHP nesne yönelimli tarafını öğrenmeye çalışıyorum, ve merak ediyorum:

Ben, bir veritabanına bir bağlantı açmak için bir _constructor kullanılan, o sınıfın (örn. insert) içinde bir fonksiyon kullanılır tanımlanmış olsaydı __ yoketme yöntemi sonra bağlantıyı kapatın yürütülür "insert"?

class data(){
  function __constructor {
    // connect to db
  }

  function insert($data){
    // mysql_query(...)
  }

  function __destructor {
    // close connection to db
  }
}

$obj = new db();
$obj->insert('mumbo jumbo');

Or would the connection to the database still be open? Cause I read that the destructor is only run if the object is destroyed. But how do you destroy an object?

5 Cevap

Kapsam dışına gittiğinde PHP, bir nesne yok edilir. Betiğin durur veya işlevi biter içinde oluşturulan, ancak zaman zaman kullanarak erken kodunda bir nesne yok edebilir Bu normalde:

unset($my_variable);

Yani, soru cevap, sen yıkıcı özellikle küçük komut ile, çoğu durumda sizin için DB kapanış işlemek için izin ince olmalıdır.

Evet, bu sürece orada ne karşı olarak yapıcılar ve yıkıcılar için doğru adları, __construct() ve __destruct() , kullanmak gibi, iyi çalışır.

Nesne bir kez buna artık bir referans komut dosyası yürütme sonlandırıldığında nesne tutan veya son değişken tarafından unset()-tınlı, örneğin, orada imha edilir.

Bu arada, sihirli yöntemler sürükleme olmadan __construct ve __destruct adlandırılır -or.

BTW, Kurucular ve Yıkıcılar __ inşa ve __ imha denir.

db için daha fazla başvuru olduğunda __destructor olacağını söyledi. Tipik nesne kapsam dışına gittiğinde, bu gerçekleşir, ama buna diğer başvuruları kaydedilmiş varsa, bu olmayacak. Sen db kullanarak başvurular kaldırabilirsiniz

unset($obj);

ve aynı şekilde her yerde $ obj saklanan varsa.

PHP de nesne yok olsa bile, DB bağlantı "arka planda" hala açık olduğunu ve correspondending pconnect (veya PDO analog) çağırdığınızda yeniden olacağı anlamına gelir, veritabanlarına kalıcı bağlantılarını destekleyen unutmayın dahaki sefere.