Kopiere oder kopiere zusätzliche Variablen in PHP nicht?

8

Lesen Sie die Google Developers PHP-Leistungstipps Ich habe gesehen, dass es nicht empfehlenswert ist, ein Extra zu erstellen Kopie einer Varible.

Statt dessen:

%Vor%

Es empfiehlt Folgendes:

%Vor%

Der Grund ist ein möglicher unnötiger Speicherverbrauch.

Aber bei einigen Suchanfragen habe ich einige Widerlegungen gesehen, dass PHP die "Copy-on-Write" -Speicherverwaltung implementiert. Dies bedeutet im Grunde, dass wir beliebig vielen Variablen einen Wert zuweisen können, ohne uns um die Daten kümmern zu müssen, die tatsächlich kopiert werden.

Ich würde also gerne wissen, ob in komplexeren Situationen, wo zum Beispiel $_POST oder $_GET Variablen an vielen Stellen des Codes verwendet werden, ob es besser ist, zusätzliche Variablen zu verwenden oder nicht zu verwenden diese Kriterien:

1) Sicherheit

2) Wartung / Lesbarkeit

3) Leistung

BEARBEITEN 1

Ich werde das folgende Beispiel verwenden, um die Frage besser zu veranschaulichen.

Ist es besser, diese Art Code (unter Berücksichtigung der oben genannten Kriterien):

%Vor%

Oder das?

%Vor%     
Marcio Mazzucato 10.07.2012, 15:43
quelle

2 Antworten

4

PHPs "Lazy Copy" gilt nur für Arrays. Die Daten des Arrays werden nur dupliziert, wenn eine Kopie des Arrays geändert wird. Daher ist es in Ordnung, wenn die foreach -Schleife beispielsweise für eine Kopie des ursprünglichen Arrays verwendet wird.

Objekte werden als Referenz übergeben, auch wenn dies nicht mit & geschieht. Beispiel:

%Vor%

Ressourcen sind Verweise auf eine Ressource, die von einer bestimmten Erweiterung verwendet werden soll, sodass sie nicht sinnvoll kopiert werden können.

Alles andere wird direkt kopiert.

Unnötige Variablen sollten auf jeden Fall vermieden werden. Zum Beispiel statt:

%Vor%

Sie könnten einfach schreiben:

%Vor%

(oder in diesem Fall nur echo 197; )

Der Punkt ist, dass unnötige Variablen Unordnung erzeugen und möglicherweise mit einer Variablen kollidieren könnten, die Sie anderswo definiert haben.

    
Niet the Dark Absol 10.07.2012, 15:51
quelle
4

Wenn Sie keine "Kopie" von $ description brauchen, ist der klarere Ansatz definitiv:

%Vor%

In Bezug auf die Leistung, wie Sie es gesagt haben, wird PHP immer noch einen resultierenden Wert im Speicher erzeugen und ihn einer Z_Data-Struktur zuweisen, so dass er immer noch Speicher verbraucht. Es ist also nicht schneller oder weniger speicherintensiv, die erste oder die zweite Methode zu verwenden.

Schließlich hat die Sicherheit nichts mit Speicherverbrauch zu tun, aber Sie müssen sich daran erinnern, wie Sie Ihre Ausgabe richtig reinigen. Die Verwendung von Strip-Tags ist in Ordnung, das Hinzufügen von Schrägstrichen ist eine weitere gute Möglichkeit, Hacker daran zu hindern, XSS-Injektionen zu verwenden.

Beachten Sie auch, was Ihre Kopie beim Schreiben betrifft, wenn Sie dies tun:

%Vor%

statt

%Vor%

Das späte wird dir offensichtlich Speicher ersparen ... sehr wenig in diesem Fall, aber du wirst trotzdem einige speichern ...

    
Mathieu Dumoulin 10.07.2012 15:48
quelle

Tags und Links