Hallo,
ich habe unter PHP 4.4 ein Programm entwickelt, welches unter PHP 5.3 nicht mehr funktioniert. Ich habe ein Objekt und darin eine Variable, die als Struktur einen Zeiger auf Datenbereiche abbildet, sowie ein Array, welches mir bestimmte Zeigerpositionen als Merker abspeichern soll:
Ich verwende folgende Anweisungen für das Initialisieren eines Zeigers im Konstruktor des Objektes:
Die Zeiger verändern sich im Laufe des Programms:
Um mir einen Zeiger zu merken, mache ich folgendes:
merke mir den Schlüssel und greife bei Bedarf über
auf eine gemerkte Position zurück. Unter PHP 4.4 und ich meine mich zu erinnern, auch PHP 5 in der Anfangszeit, funktionierte das ganz prächtig. Mit einer aktuellen Version 5.3.14 scheint die Zuweisung an das Array nicht mehr per Kopie, sondern als Referenz zu erfolgen. Statt der folgenden Daten unter PHP 4.4 (print_r)
finde ich folgendes in PHP 5.3 in meinem Speicher-Array:
Die Daten sehen für mich ziemlich deutlich so aus, dass PHP hier im Array mit Referenzen auf meinen Zeiger $this->i_zeiger arbeitet:
In jeder Dokumentation finde ich den ausdrücklichen Hinweis, PHP arbeitet nur bei Voranstellen von & vor der Variable mit Referenzen. Was ist hier los? Kann ich irgendwie das alte Verhalten wieder herbeizaubern?
ich habe unter PHP 4.4 ein Programm entwickelt, welches unter PHP 5.3 nicht mehr funktioniert. Ich habe ein Objekt und darin eine Variable, die als Struktur einen Zeiger auf Datenbereiche abbildet, sowie ein Array, welches mir bestimmte Zeigerpositionen als Merker abspeichern soll:
PHP-Code:
class mein_objekt {
var $i_zeiger;
var $i_marker = array();
...
PHP-Code:
function mein_objekt() {
$this->i_zeiger->char = -1;
$this->i_zeiger->block = 0;
...
PHP-Code:
$this->t_zeiger->char++;
$this->t_zeiger->block++;
PHP-Code:
$this->i_marker[] = $this->i_zeiger;
PHP-Code:
$this->i_zeiger = $this->i_marker[$key];
PHP-Code:
Array
(
[0] => stdClass Object
(
[char] => -1
[block] => 0
)
[1] => stdClass Object
(
[char] => 21
[block] => 0
)
[2] => stdClass Object
(
[char] => 485
[block] => 0
)
[3] => stdClass Object
(
[char] => 496
[block] => 0
)
[4] => stdClass Object
(
[char] => 664
[block] => 0
)
)
PHP-Code:
Array
(
[0] => stdClass Object
(
[char] => 873
[block] => 0
)
[1] => stdClass Object
(
[char] => 873
[block] => 0
)
[2] => stdClass Object
(
[char] => 873
[block] => 0
)
[3] => stdClass Object
(
[char] => 873
[block] => 0
)
[4] => stdClass Object
(
[char] => 873
[block] => 0
)
)
PHP-Code:
[i_zeiger] => stdClass Object
(
[char] => 873
[block] => 0
)
Kommentar