我正在尝试编写一个返回对PDO对象的引用的函数。想要引用的原因是,由于某种原因,如果PDO对象在一个页面加载中被调用两次,它将返回相同的对象而不是初始化一个新对象。这不傻,是吗? :/
function &getPDO()
{
var $pdo;
if (!$pdo)
{
$pdo = new PDO...
return $pdo;
}
else
{
return &pdo;
}
}
像这样的东西
答案 0 :(得分:3)
使用static $pdo;
。
function getPDO()
{
static $pdo;
if (!$pdo)
{
$pdo = new PDO...
}
return $pdo;
}
答案 1 :(得分:2)
对象始终通过PHP引用传递。例如:
class Foo {
public $bar;
}
$foo = new Foo;
$foo->bar = 3;
myfunc($foo);
echo $foo->bar; // 7
function myfunc(Foo $foo) {
$foo->bar = 7;
}
它只是通过值传递的非对象(标量,数组)。请参阅References Explained。
关于您的功能,您需要将变量设为静态。在PHP 5中不推荐使用var
。所以:
function getFoo() {
static $foo;
if (!$foo) {
$foo = new Foo;
}
return $foo;
}
不需要和号。
同样请参阅Objects and references。
答案 2 :(得分:1)
要引用变量$foo
,请执行以下操作:
$bar =& $foo;
然后return
$ bar。
答案 3 :(得分:0)
你会这样写的
function getPDO() { static $pdo; if (!$pdo) { $pdo = new PDO... } return $pdo; }