PHP bug !

Kezdőlap Fórumok Programozás PHP bug !

10 bejegyzés megtekintése - 1-10 / 11
  • Szerző
    Bejegyzés
  • #2008174
    krix
    Felhasználó

      Több napot szenvedtem, mire kiderült, hogy a lenti bug található a PHP-ben. Eddig minden verzióban hibás volt. (Csak 4-eseket próbáltam.)
      Ha egy osztály elemváltozója is osztály, és ez utóbbi mûveletét használod, akkor referenciaváltozóvá válik …

      Kissé tanácstalan vagyok. Ha valakinek lenne ötlete, hogy hogyan lehet áthidalni, azaz hogyan tudnám a PHP-t megbízhatóan összetett struktúrák elkészítésére használni, azt megköszönném.
      Ha valaki azt el tudná mondani, hogy mi lehet a bug oka, az is jól jönne. Ugyanis nem tudom, hol ütheti még fel a fejét … ? (Vagy én értelmezek félre vagy rontok el valamit?)
      De ha bárki, bármi bíztatót tud szólni, már az is elég lenne! Több hónapos fejelsztés eredményeként állt elõ egy ennyire összetett kód. … Most dobjam ki? (Netán javaslat, megbízható objektum orientált plattformra?)
      No, azt hiszem ennyi. Ha valaki még elõtte áll egy ilyennek, ne ágyazzon egymásba objektumokat.
      🙁

      value=”;
       }
       
       function muvelet() { // Csak a mûvelet meghívása a fontos
         $this->value=”; // Tetszõlege utasítás lehet, vagy akár semmi
       }
      }

      class Fo {
       var $adat; // Adat osztályú értékkel fogjuk feltölteni.[code]
      value=”;
       }
       
       function muvelet() { // Csak a mûvelet meghívása a fontos
         $this->value=”; // Tetszõlege utasítás lehet, vagy akár semmi
       }
      }

      class Fo {
       var $adat; // Adat osztályú értékkel fogjuk feltölteni.

      #2008175
      linuxforum
      Felhasználó

        Szerintem ezt a kerdest a weblabor.hu forumaban tedd fel, ott tutira tudnak ra valaszt adni. 🙂

        Köszönöm!

        #2008176
        Leslieman
        Felhasználó

          Szerintem nincs hiba, csak te gondolod.
          A „$masolat=$fo; // Teljesen függetlennek kellene lennie” jól mûködik, ahogy kell, csak te nem ezt várod.
          Ha a $fo egy sima alap változó (mondjuk int) akkor az

          #2008177
          linuxforum
          Felhasználó

            Ha viszont $fo egy objektum, akkor nem az értéke (értsd a teljes objektum és adatai) másolódik át, hanem az objektumra mutató MUTAT

            #2008178
            Leslieman
            Felhasználó

              Még c++ -ban sem igaz, hogy az objektum másolása attól függ, használod-e egy metódusát, vagy sem.

              Ki mondott ilyet?

              #2008179
              linuxforum
              Felhasználó

                Elveszett az elõzõ – jól kidolgozott válaszom. 🙁

                #2008180
                Leslieman
                Felhasználó

                  Nos, azt eddig elfelejtettem írni, hogy én php 5.0.2-vel próbálkozok. Lehet, hogy ebben már másképp viselkednek ezek a dolgok (egyébként pont úgy, ahogy c++-ban).
                  Bár igaz, hogy c++-ban ezek objektumra mutató mutatók lennének, php-ban meg mittoduménhogyhívják… 🙂

                  Minden esetre ha ezzel a php-val lefuttatom az általam feljebb írt progit, akkor ezt írja ki a képernyõre:

                  Code:
                  object(Fo)#2 (1) { [„adat”]=>  object(Adat)#1 (1) { [„value”]=>  string(5) „adat1” } }
                  object(Fo)#2 (1) { [„adat”]=> object(Adat)#1 (1) { [„value”]=> string(5) „adat1” } }
                  object(Fo)#3 (1) { [„adat”]=> object(Adat)#1 (1) { [„value”]=> string(5) „adat1” } }
                  object(Fo)#5 (1) { [„adat”]=> object(Adat)#4 (1) { [„value”]=> string(5) „adat2” } }

                  $fo->adat->muvelet(); után:
                  object(Fo)#2 (1) { [„adat”]=> object(Adat)#1 (1) { [„value”]=> string(7) „muvelet” } }
                  object(Fo)#2 (1) { [„adat”]=> object(Adat)#1 (1) { [„value”]=> string(7) „muvelet” } }
                  object(Fo)#3 (1) { [„adat”]=> object(Adat)#1 (1) { [„value”]=> string(7) „muvelet” } }
                  object(Fo)#5 (1) { [„adat”]=> object(Adat)#4 (1) { [„value”]=> string(5) „adat2” } }

                  A sorok sorban a következõ objektumokat mutatják (ahogy a kódban is láthatod):
                  – $fo
                  – $masolat
                  – $masolat2
                  – $masolat3

                  Ahogy látható az eredmény elsõ két sorában a object(Fo)#2 azt mutatja, hogy az kukkra ugyan az az ojektum, ahogy vártuk ( vártam 😉 ).
                  A harmadik sornál látszik (object(Fo)#3), hogy az már egy új objektum, de az is látszik, hogy az ‘adat’ adattagja még ugyan az, mint az elsõ kettõé (object(Adat)#1).

                  #2008181
                  linuxforum
                  Felhasználó

                    Késõ van, próbálok csak kis lépéseket tenni.
                    PHP5-ben az eredeti, általam adott kód lefutása után a ‘hibás’ szöveg jelenik meg. Ugye?

                    #2008182
                    Leslieman
                    Felhasználó

                      Nos php 5.0.2-nél az eredeti programodat futtatva tök mindegy melyik „->muvelet()” sort teszem megjegyzésbe, egyiket, másikat, egyet sem vagy akár mindkettõt. Mindig azt írja, hogy ‘hibás’.

                      #2008183
                      linuxforum
                      Felhasználó
                      10 bejegyzés megtekintése - 1-10 / 11
                      • Be kell jelentkezni a hozzászóláshoz.