2009-11-04 14 views
99

używam biblioteki Facebook z tego kodu w niej:Co to znaczy uruchomić funkcję PHP za pomocą ampersand?

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

Co robi & na początku definicji funkcji średniej i jak mogę iść o użyciu biblioteki tak (w prosty przykład)

Odpowiedz

130

Znak ampersand przed nazwą funkcji oznacza, że ​​funkcja zwróci odniesienie do zmiennej zamiast wartości.

Wracając przez odniesienie jest przydatna, gdy chcesz użyć funkcji do znalezienia na których zmienna odniesienia powinny być związany. Nie używaj kodu powrotu przez odniesienie , aby zwiększyć wydajność. Silnik automatycznie zoptymalizuje to na własnym komputerze. Zwracaj referencje tylko wtedy, gdy masz ważny techniczny powód, aby zrobić to.

Zobacz Returning References.

+3

Ponadto http://php.net/references może trochę pomóc. –

+1

Tak więc, bez wchodzenia w szczegóły, wywołałbyś (z instancją klasy) coś w rodzaju $ results = $ facebook-> users_hasAppPermission ($ param1, $ param2); ? Sądzę, że nie jestem pewien tego niuansu, dzięki za pomoc. –

+2

Tak - nazwałbym to tak. –

13

Powraca, jak już wspomniano. W PHP   4 obiekty zostały przypisane wartością, podobnie jak każda inna wartość. Jest to wysoce nieintuicyjne i sprzeczne z tym, jak działa większość innych języków.

Aby obejść problem, użyto referencji dla zmiennych wskazujących obiekty. W PHP   5 odniesienia są bardzo rzadko używane. Zgaduję, że jest to starsza wersja kodu lub kodu próbującego zachować kompatybilność wsteczną z PHP   4.

+0

To oficjalna biblioteka PHP na Facebooku, FWIW. –

+0

Informacje na temat nowego modelu obiektowego PHP 5 (w przeciwieństwie do starych bzdur pass-by-value (i innych bzdur) z PHP4): http://php.net/manual/en/migration5.oop.php – Dereleased

+3

@Alex : W takim przypadku prawdopodobnie robią to, by chronić zwykłych hakerów, którzy używają php4 od nich samych. Nie powinieneś tego robić we własnym kodzie - jest przestarzały. – troelskn