Frage

Wird es einen messbaren Unterschied in der Leistung sein, wenn die Daten als Werte und nicht als Referenz in PHP vorbei?

Es scheint, wie wenige Menschen sind sich dessen bewusst, dass Variablen als Werte übergeben werden, anstatt von Referenzen. Ist dies der gesunde Menschenverstand oder nicht?

War es hilfreich?

Lösung

Wenn Sie eine große Variable von Wert sind vorbei (die Standardeinstellung außer Objekten in PHP5 + für alles ist), dann ja, können Sie eine Performance-Einbußen nehmen.

Zum Beispiel, wenn der Benutzer sendet eine große Menge von POST-Daten, wenn Sie (nach Wert übergeben aka), die zu einer Funktion in der Regel passieren, so würde die ganze Array kopiert werden, die die Leistung beeinträchtigen würde. Allerdings, wenn Sie auf einem sehr großen Gelände sind, dann werden Sie wahrscheinlich feststellen, die nicht der Hit.

Pass durch Verweis ist möglich in PHP, aber sicherlich nicht der Standard (es sei denn, es ist ein Objekt): Sie benötigen ein & vor der Variablen hinzufügen, um es als Verweis übergeben zu machen, ansonsten ist es nur nach Wert (und kopiert sie). Ab PHP5 werden Objekte als Referenz übergeben automatisch, aber bevor PHP5 müssen Sie explizit durch Verweis übergeben (dh fügen Sie den &)

Andere Tipps

Von meinem Verständnis, PHP 5 gibt einfache Datentypen und Arrays nach Wert, aber wenn es um Objekte geht geht es durch Bezugnahme eingeschlossen. Es scheint dies ein Verhalten ist, dass Sie sich bewusst sein sollten -. Ich gehe davon aus Arrays von Wert übergeben werden und somit Großen können auch eine Performance-Einbußen entstehen, wenn Sie gemacht keine Kopie erforderlich werden

Ich habe viele Argumente gesehen gegen ausdrücklich durch Bezugnahme vorbei und lassen PHP nicht sein Ding.

Auch, wenn Sie ein Objekt nach Wert übergeben wollen, dann sollten Sie es klonen, ideal.

Wenn es einen Unterschied in der Leistung, es ist vernachlässigbar. Sorgen Sie sich nicht über diese Art von Mikro-Optimierungen, wenn Sie wissen , die durch Bezugnahme Passieren einer Leistungseinbußen verursacht (außer ich nicht eine Situation vorstellen, wo das ist wahr).

Auf einer Seite beachten, raten die Menschen im Allgemeinen gegen Übergabe von Argumenten durch Verweis, weil es schlechtes Design fördert, ähnlich wie tut globale Variablen.

Ich bin sicher nicht das, was Sie mit dem letzten Teil gemeint, though. PHP gibt Argumente von Wert in der Standardeinstellung.

Die Objekte werden immer als Referenz übergeben, wenn Sie eine aktuelle Version von PHP verwenden. Wie der anderen Art, sind das Hauptanliegen der Strings / Arrays. Für diejenigen, es hängt davon ab. PHP-Implementierung von Strings macht, dass, wenn Sie nicht die Zeichenfolge ändern Sie die Funktion des Arguments sind vorbei (Sie lesen es nur / scannen), es wird nie kopiert werden. Die Umsetzung wird "copy-on-write" genannt. Ich bin mir nicht sicher Array, ich werde einige Tests brauchen diese zu beantworten.

Wenn Sie die von Wert String-Argumente übergeben ändern, wird es durch Bezugnahme kein Unterschied mit dem übergeben werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top