2012-07-03 1 views
0

내 질문을 반환하는 유효한 기술 사용이되고있는 다음과 같은 질문 후속 :PHP5에서 참조로

class FacebookRestClient { 
... 
    public function &users_hasAppPermission($ext_perm, $uid=null) { 
     return $this->call_method('facebook.users.hasAppPermission', 
     array('ext_perm' => $ext_perm, 'uid' => $uid)); 
    } 
... 
} 

이유는 다음과 같습니다 What does it mean to start a php function with an ampersand?

질문에 사용 된 예제 코드이있다 참조가 이미 필요할 때 참조가 필요합니다 ($ this)? 당신이 어떤 변수 참조가 바인드해야 찾을 수있는 기능을 사용하고자 할 때

chosen answer 따옴표 기준으로 갈까요 PHP manual on Returning References

에서 다음 유용합니다. 성능 향상을 위해 return by reference를 사용하지 마십시오. 엔진이 자동으로 최적화합니다. 유효한 기술적 이유가있을 때만 참조를 반환하십시오.

second answer은 PHP4에서이 기술이 필요한 이유를 제공합니다. 그러나 나는 PHP5에서 왜 그렇게 확신이 있는지에 대한 답을 찾지 못했습니다.

누구든지 PHP5에서이 기술을 사용하는 데 유효한 이유를 알고 있습니까?

답변

2

예, 여기 내 코드베이스의 예입니다.

저는 각 모델에 대해 UserFactory와 같은 "factory"클래스가 있습니다. UserFactory :: findOne()을 호출하면 UserFactory의 배열에 저장된 모델에 대한 참조가 반환됩니다.

이렇게하면 사용자 모델을 가져 와서 무언가를 수정 한 다음 나중에 코드로 다시 가져 오면 결코 데이터베이스로 돌아 가지 않았지만 새 정보로 업데이트됩니다. 예를 들어

: 참조로 반환

<?php 
$user = UserModel::findOne([ '_id' => 151 ]); 
$user->status = 'disabled'; 

// Much later 
$user = UserModel::findOne([ '_id' => 151 ]); 
if ($user->status != 'disabled') { 
    // Do stuff 
} 

내 데이터베이스를 두 번 호출하지 않고 이것을 달성하는 좋은 방법입니다.

+0

어쨌든 참조로 반환하지 않습니까? 뭔가 빠졌어. –

+0

함수 정의에서 &를 명시 적으로 사용하지 않으면 참조로 값을 반환 할 수 없습니다. PHP4에서는 가능하지만 PHP5에서는 가능하지 않습니다. –