2010-01-05 6 views
1

PDO 객체에 대한 참조를 반환하는 함수를 작성하려고합니다. 참조를 원한다면 어떤 이유로 PDO 객체가 한 페이지로드에서 두 번 호출되면 새로운 객체를 초기화하는 대신 동일한 객체를 반환하게됩니다. 바보가 아니지? :/변수 $foo에 대한 참조를 만들려면 그PHP 함수가 참조 변수를 반환합니다.

+0

'&$pdo;을 반환'구문 오류처럼 작성합니다. 'return $ pdo;'를해야합니다. '&'기호는 함수 선언에서만 사용되며 반환 할 때는 사용되지 않습니다. – Pacerier

답변

1

같은

function &getPDO() 
{ 
    var $pdo; 

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

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

뭔가, 이렇게 :

$bar =& $foo; 

그런 return $ 줄을.

3

static $pdo;을 사용하십시오.

function getPDO() 
{ 
    static $pdo; 

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

    return $pdo; 

} 
+0

도움에 대한이 의견 아래에있는 귀하와 다른 모든 분들께 감사드립니다. 그래서이 함수는 앰퍼샌드가 필요없는 변수에 대한 참조를 리턴 할 것입니다. – dave

+0

@dave, 앰퍼샌드없이 * 참조 *를 반환하지 않습니다. 반환하는 것은 객체 식별자의 복사본입니다 http://php.net/manual/en/language.oop5.references.php – Pacerier

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을 참조하십시오.

함수와 관련하여 변수를 정적으로 만들어야합니다. var은 그래서 PHP 5에서 더 이상 사용되지 않습니다 :

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

없음 앰퍼샌드가 필요하지 않음.

Objects and references도 참조하십시오.

+0

** 사실이 아닙니다 **, 전달되는 것은 참조가 아닌 식별자의 사본입니다. . 연결된 링크가 첫 번째 파라에서 설명합니다 ... – Pacerier

0

당신은 이것이

 
function getPDO() 
{ 
    static $pdo; 

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

    return $pdo; 
} 
관련 문제