3 Domanda: Cosa significa iniziare una funzione PHP con una e commerciale?

domanda creata a Fri, Sep 12, 2014 12:00 AM

Uso la libreria di Facebook con questo codice:

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

Che cosa significa & all'inizio della definizione della funzione significa, e come faccio ad usare una libreria come questa (in un semplice esempio)

    
118
3 risposte                              3                         

Una e commerciale prima del nome di una funzione significa che la funzione restituirà un riferimento a una variabile anziché il valore.

  

Il ritorno per riferimento è utile quando   vuoi usare una funzione per trovare   quale variabile dovrebbe essere un riferimento   limite. Non utilizzare il ritorno per riferimento   per aumentare le prestazioni. Il motore   lo ottimizzerà automaticamente   propria. Restituisce solo riferimenti quando   hai una valida ragione tecnica per   fallo.

Vedi Restituzione di riferimenti .

    
146
2011-11-13 02: 11: 44Z
  1. Inoltre, php.net/references potrebbe aiuta anche un po '.
    2009-11-04 21: 54: 01Z
  2. Quindi, senza entrare troppo nel dettaglio, chiameresti (con la classe istanziata) qualcosa come $results = $facebook- > users_hasAppPermission ($param1, $param2) ; ? Immagino di non essere sicuro delle sfumature qui, grazie per l'aiuto però.
    2009-11-04 21: 56: 40Z
  3. Sì, lo chiamerei in questo modo.
    2009-11-04 22: 19: 24Z

Restituisce un riferimento, come già detto. In PHP 4, gli oggetti venivano assegnati per valore, proprio come qualsiasi altro valore. Questo è altamente intuitivo e contrario a come funziona la maggior parte delle altre lingue.

Per aggirare il problema, i riferimenti erano usati per le variabili che puntavano agli oggetti. In PHP 5, i riferimenti sono usati molto raramente. Sto indovinando che si tratta di codice o codice legacy che tenta di preservare la retrocompatibilità con PHP 4.

    
14
2015-12-01 18: 27: 20Z
  1. È la libreria PHP ufficiale di Facebook, FWIW.
    2009-11-04 22: 01: 45Z
  2. @ Alex: In tal caso, probabilmente lo fanno per proteggere gli hacker occasionali, che usano php4, da loro stessi. Non dovresti farlo nel tuo codice: è deprecato.
    2009-11-04 22: 36: 35Z
  3. "Questo è molto intuitivo e contrario a come funziona la maggior parte degli altri linguaggi" Non potrei essere in disaccordo di più.
    2011-08-01 14: 52: 13Z
  4. @ WildlyInaccurate: Assegnare oggetti per riferimento per impostazione predefinita, che è ciò che accade in .NET e in Java (penso), è altamente intuitivo. Nella maggior parte degli altri linguaggi, l'assegnazione viene eseguita per copia, sia che tu abbia un "oggetto" o un primitivo o qualsiasi altra cosa, e poiché questo è stato il caso fin dall'alba dei tempi, questo è ciò a cui il mondo avrebbe dovuto attenersi.
    2012-12-04 17: 29: 17Z
  5. Se qualcosa è intuitivo è probabilmente piuttosto soggettivo. Ma per le lingue che sono altrimenti simili a PHP, la norma è passare oggetti per riferimento. Riguardo a OOP, direi questoè il modo più intuitivo, dal momento che l'OOP riguarda lo stato di incapsulamento, quindi i programmi di solito si riferiscono a quello stato, invece di clonarlo.
    2012-12-05 00: 04: 04Z

Questo è spesso noto in PHP come Restituzione di riferimento o Restituzione per riferimento .

  

Il ritorno per riferimento è utile quando si desidera utilizzare una funzione per   trova a quale variabile deve essere associato un riferimento. Non usare   ritorno per riferimento per aumentare le prestazioni. Il motore lo farà   ottimizzarlo automaticamente da solo. Restituisce solo riferimenti quando   hai un valido motivo tecnico per farlo.

documentazione PHP su Restituzione di riferimento

Un riferimento in PHP è semplicemente un altro nome assegnato al contenuto di una variabile. I riferimenti PHP non sono come puntatori nella programmazione C , non sono effettivi indirizzi di memoria, quindi non possono essere utilizzati per l'aritmetica dei puntatori.

Il concetto di riferimenti di ritorno può essere molto confuso soprattutto per i principianti, quindi un esempio sarà utile.

 
$populationCount = 120;

function &getPopulationCount() {
  global $populationCount;
  return $populationCount;
}

$countryPopulation =& getPopulationCount();
$countryPopulation++;
echo "\$populationCount = $populationCount\n"; // Output: $populationCount = 121 
echo "\$countryPopulation = $countryPopulation\n"; //Output: $countryPopulation = 121 

La funzione getPopulationCount() definita con un precedente & restituisce il riferimento al contenuto o al valore di $populationCount. Quindi, incrementando $countryPopulation, aumenta anche $populationCount.

    
3
2019-01-21 08: 58: 27Z
fonte posta Qui