Bir referansı bir değişken dönmek için PHP işlevi

4 Cevap php

Ben bir PDO nesnesine bir başvuru döndüren bir fonksiyon yazmaya çalışıyorum. Nedense, PDO nesne iki kez bir sayfa yük, sadece yerine yenisini başlatılıyor daha aynı nesneyi dönecektir çağrılır, eğer bir referans isteyen için nedenidir. Bu, aptal değil, değil mi? :/

function &getPDO()
{
   var $pdo;

   if (!$pdo)
   {
      $pdo = new PDO...

      return $pdo;
   }
   else
   {
      return &pdo;
   }
}

Bunun gibi bir şey

4 Cevap

Kullan static $pdo;.

function getPDO()
{
   static $pdo;

   if (!$pdo)
   {
      $pdo = new PDO...
   }

   return $pdo;

}

Nesneler always PHP referans geçti. Örneğin:

class Foo {
  public $bar;
}

$foo = new Foo;
$foo->bar = 3;
myfunc($foo);
echo $foo->bar; // 7

function myfunc(Foo $foo) {
  $foo->bar = 7;
}

Bu değer geçirilir olmayan tek nesneler (skalerler, diziler) bulunuyor. Bkz References Explained.

Lütfen fonksiyonuna bağlı olarak, değişken static yapmak gerekir. var PHP 5 önerilmiyor So.:

function getFoo() {
  static $foo;
  if (!$foo) {
    $foo = new Foo;
  }
  return $foo;
}

Ampersan gerekmez.

Bkz Objects and references de.

Bir değişkene bir başvuru yapmak için $foo, bu do:

$bar =& $foo;

Sonra return $ bar.

Bunu böyle yazmak

function getPDO()
{
   static $pdo;

   if (!$pdo) {
      $pdo = new PDO...
   }

   return $pdo;
}