2 Stimmen

Php string ist ein Wertetyp?

Warum ist php's string ein Wertetyp? Er wird jedes Mal, wenn das Argument an eine Funktion übergeben wird, jedes Mal, wenn eine Zuweisung erfolgt, kopiert, und jede Verkettung bewirkt, dass String kopiert wird. Meine Erfahrung mit .NET sagt mir, dass dies ineffizient ist und mich zwingt, fast überall Referenzen zu verwenden. Betrachten Sie die folgenden Alternativen:

Alternative 1

// This implementation hurts performance
class X {
    public $str;
    function __construct($str) { // string copied during argument pass
        $this->$str = $str; // string copied here during assignment
    }
}

Alternative 2

// This implementation hurts security
class Y {
    public $str;
    function __construct(&$str) {
        $this->$str = &$str;
    }
}
// because
$var = 'var';
$y = new Y($var);
$var[0] = 'Y';
echo $y->var; // shows 'Yar'

Alternative 3

// This implementation is a potential solution, the callee decides
// whether to pass the argument by reference or by value, but
// unfortunately it is considered 'deprecated'
class Z {
    public $str;
    function __construct($str) {
        $this->$str = &$str;
    }
}
// but
$var = 'var';
$z = new Z(&$var); // warning jumps out here
$var[0] = 'Z';
echo $y->var; // shows 'Zar'

Die Frage: Welche Schmerzen sollte ich wählen Leistung / Sicherheit / Veralterung

10voto

Craige Punkte 2832

PHP geht mit seinen Variablen recht vernünftig um. Intern verwendet PHP ein Copy-on-Modification-System.

Das heißt, dass diese Werte per Verweis zugewiesen werden, bis einer von ihnen geändert wird, woraufhin er einen neuen Speicherplatz für den neuen Wert erhält.

1voto

Dreamcube Punkte 165

Die Übergabe von Variablen per Referenz wird die Leistung beeinträchtigen.

Ihr Beispiel Nr. 1 ist die beste Leistung und der beste Weg, dies zu tun.

class X {
    public $str;
    function __construct($str) {
        $this->str = $str;
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X