Vraag : Het overgaan van series door waarde

Ik begrijp dat PHP natively variabelen door waarde, niet door verwijzing overgaat (tenzij de instructies om worden overgegaan dit te doen, b.v., gebruikend de ampersandexploitant).

So als ik een functie heb die een serie na de verwerking van het meerdere keren terugkeert, ben I die verminderde prestaties (of enkel slechte praktijk gebruiken) krijgen, door iets in die aard te doen: process_list

function ($list) {
$list = array_slice ($list, $from, $len);
$list = some_sort_function ($list, $sorts);
$list = some_filter_function ($list, $filters);
terugkeer$list;
}

Am I leiden tot verscheidene verspilde duplicaten die gebruiken bovengenoemd?  Ik zou moeten vermelden dat $list niet alleen één serie is - dat de voorbeeldfunctie hierboven zou kunnen worden gebruikt om verscheidene verschillende datasets te verwerken, die of om het even wat in gemeenschappelijk zouden kunnen zouden kunnen niet hebben.  Het is psuedo-code, maar ik denk de fundamentele vraag beter dan de meer lengte real-world situation.

TYIA
vertegenwoordigt

Antwoord : Het overgaan van series door waarde

In dit geval, is allen u bewaart één exemplaarverrichting van de originele serie.
De laatste 2 lijnen zijn waarom het overgaan door waarde normaal, daarna de voorkeur heeft

$some_dataset = // grote ingewikkelde serie
$processed = process_list ($some_dataset);

U beëindigt normaal omhoog met 2 series, $some_dataset en $processed, allebei waarvan verschillend zijn.
Als process_list een serie door verwijzing neemt, dan beëindigen die twee lijnen eigenlijk omhoog met $some_dataset en $processed zijnd 2 EXEMPLAREN van de zelfde series (niet verwijzing, exemplaar door waarde).
De taken van de serie zijn altijd exemplaar-door-waarde, tenzij & gebruikt om de verwijzing te kopiëren.

array_slice alleen leidt tot een exemplaar van de ondergroep.
De 2 soortfuncties keren ook nieuwe series terug.
U bent waarschijnlijk beter van enkel het plakken aan het overgaan door waarden tenzij u het werkelijk begrijpt.

FWIW, om één enkele exemplaarverrichting te bewaren, zou de laatste 2 lijnen zijn

$some_dataset = // grote ingewikkelde serie
process_list ($some_dataset); // en blijft $some_dataset na deze lijn gebruiken
Andere oplossingen  
 
programming4us programming4us