PHP yapıcı hata içine nesneleri Passing

4 Cevap php

Bir PHP sınıfının yapıcı bir nesne geçmek ve sınıfta fonksiyonların geri kalanı tarafından kullanılabilecek bir global değişken olarak bu nesneyi ayarlamak mümkün mü?

Örneğin:

class test {

   function __construct($arg1, $arg2, $arg3) {
      global $DB, $ode, $sel;

      $DB = arg1;
      $ode = arg2;
      $sel = $arg3;
   }

   function query(){
      $DB->query(...);
   }

}

Ben bu yapmaya çalıştığınızda, ben hata bir "olmayan bir nesne üzerinde bir üye işlev çağrısı" olsun. Bunu yapmak için yine de var mı? Aksi takdirde, ben doğrudan her işlevi nesneleri geçmek zorunda.

Teşekkürler!

4 Cevap

Muhtemelen $this değerlere onları atamak istiyorum.

Yapıcınızda, sen yapardın:

$this->DB = $arg1;

Sonra sorgu işlevi:

$this->DB->query(...);

Bu benzer Yapıcınızda için diğer argümanlar ile yapılmalıdır.

$this Bir örnek bağlamında geçerli örneğini başvuru nasıl. parent:: ve self::, sırasıyla, üst sınıfının üyeleri ve sınıf statik üyeleri erişmek için anahtar kelimeler de var.

Eğer nesnenin bir özelliği olarak argüman saklayarak oldukça kolayca yapabilirsiniz:

function __construct($arg1, $arg2, $arg3) {
   $this->db = arg1;
}

function f()
{
  $this->db->query(...);
}

As a side-note...
Even thought this isn't required, it is generally considered best to declare member variables inside the class. It gives you better control over them:

<?php
class test {
    // Declaring the variables.
    // (Or "members", as they are known in OOP terms)
    private $DB;
    protected $ode;
    public $sel;

    function __construct($arg1, $arg2, $arg3) {
      $this->DB = arg1;
      $this->ode = arg2;
      $this->sel = $arg3;
    }

    function query(){
      $this->DB->query(...);
    }
}
?>

private, protected ve public arasındaki fark hakkında ayrıntılı bilgi için PHP: Visibility bakın.

Diyelim ki bir db nesnesi var diyelim

$db = new db();

ve bir diğer amacı:

$object = new object($db);

class object{

    //passing $db to constructor
    function object($db){

       //assign it to $this
       $this-db = $db;

    }

     //using it later
    function somefunction(){

        $sql = "SELECT * FROM table";

        $this->db->query($sql);

    }

}