PHP функция для возврата ссылки на переменную - PullRequest
1 голос
/ 05 января 2010

Я пытаюсь написать функцию, которая будет возвращать ссылку на объект PDO. Причина, по которой вам нужна ссылка, заключается в том, что по какой-то причине объект PDO вызывается дважды при загрузке одной страницы, он просто возвращает один и тот же объект, а не инициализирует новый. Это не глупо, не так ли? : /

function &getPDO()
{
   var $pdo;

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

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

Нечто подобное

Ответы [ 4 ]

3 голосов
/ 05 января 2010

Использование static $pdo;.

function getPDO()
{
   static $pdo;

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

   return $pdo;

}
2 голосов
/ 05 января 2010

Объекты всегда передаются по ссылке в PHP. Например:

class Foo {
  public $bar;
}

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

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

Только необъекты (скаляры, массивы) передаются по значению. См. Объясненные ссылки .

По отношению к вашей функции вам нужно сделать переменную статической. var устарела в PHP 5. Итак:

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

Амперсанд не требуется.

См. Объекты и ссылки .

1 голос
/ 05 января 2010

Чтобы сделать ссылку на переменную $foo, сделайте следующее:

$bar =& $foo;

Тогда return $ бар.

0 голосов
/ 05 января 2010

Вы бы написали это так

function getPDO()
{
   static $pdo;

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

   return $pdo;
}
...