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