Strukturzuweisungen in array funktionieren in 5.3 offenbar nicht mehr

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Strukturzuweisungen in array funktionieren in 5.3 offenbar nicht mehr

    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:

    PHP-Code:
    class mein_objekt {
      var 
    $i_zeiger;
      var 
    $i_marker = array();
    ... 
    Ich verwende folgende Anweisungen für das Initialisieren eines Zeigers im Konstruktor des Objektes:

    PHP-Code:
    function mein_objekt() {
      
    $this->i_zeiger->char = -1;
      
    $this->i_zeiger->block 0;
    ... 
    Die Zeiger verändern sich im Laufe des Programms:

    PHP-Code:
    $this->t_zeiger->char++;
    $this->t_zeiger->block++; 
    Um mir einen Zeiger zu merken, mache ich folgendes:

    PHP-Code:
    $this->i_marker[] = $this->i_zeiger
    merke mir den Schlüssel und greife bei Bedarf über

    PHP-Code:
    $this->i_zeiger $this->i_marker[$key]; 
    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)

    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
            
    )

    finde ich folgendes in PHP 5.3 in meinem Speicher-Array:

    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
            
    )

    Die Daten sehen für mich ziemlich deutlich so aus, dass PHP hier im Array mit Referenzen auf meinen Zeiger $this->i_zeiger arbeitet:

    PHP-Code:
    [i_zeiger] => stdClass Object
            
    (
                [
    char] => 873
                
    [block] => 0
            

    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?

  • #2
    http://www.php.net/manual/en/languag...references.php
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      So weit war ich auch schon, nur wie kann ich das ohne Neuprogrammieren Auflösen? Ich will ja nicht das komplette Objekt, sondern nur Teile davon, und zwar kopieren.

      Kommentar


      • #4
        PHP: Object Cloning - Manual

        Kommentar


        • #5
          Danke, das war's!

          Kommentar

          Lädt...
          X