webForumDet fria alternativet

"Call to a member function on a non-object"-problem

1 svar · 283 visningar · startad av startail

startailMedlem sedan sep. 2000155 inlägg
#1

Jag försöker använda mig utav en del PHP kod som jag själv inte är författaren till, men det är dock skrivet för PHP 4.x och inte 5.x som jag kör på min server.

Vad jag har för problem är nämligen att jag får "Call to a member function add_child() on a non-object".

Functionen add_child ligger så här

class xml_tree_node_c extends xml_node_c {
.........
.........
  function &add_child (&$xml_node) {
    $this->_children[] = $xml_node;
    return $this->_children;
  }
........
........
}

Denna funktion kallas från en annan funktion som ligger utanför klassen xml_tree_node_c på detta vis

function text_to_xml ($xml_text) {
......
......
$stack[$stackpos] = 
	  & $stack[$stackpos-1]->add_child (new xml_tree_node_c ($val["tag"], 
								 @$val["attributes"]));
.....
.....
}

Arrayen $stack ser ut så här

Array
(
    [0] => xml_tree_node_c Object
        (
            [_name] => SyncML
            [_children] => Array
                (
                    [0] => xml_tree_node_c Object
                        (
                            [_name] => SyncHdr
                            [_children] => Array
                                (
                                )

                            [_attribs] => 
                        )

                )

            [_attribs] => Array
                (
                    [xmlns] => syncml:SYNCML1.2
                )

        )

    [1] => Array
        (
            [0] => xml_tree_node_c Object
                (
                    [_name] => SyncHdr
                    [_children] => Array
                        (
                        )

                    [_attribs] => 
                )

        )

)

Vad jag har fattat nu så är problemet att functionen add_child kallas på utan att php har någon riktig referens på vart den finns, eftersom den ligger i en klass. Dock vet jag inte hur jag skall lösa detta på...

Hoppas att någon kan visa mig hur jag skall göra.

Om någon dessutom vet någon riktigt bra dokumentation över hur man skriver ordentlig Object Orienterad kod så vore jag jätta glad med, eller kan rekomdendera någon bra bok i ämnet. Då jag uppenbarligen behöver lära mig lite mer om det.

startailMedlem sedan sep. 2000155 inlägg
#2

Glöm det, jag hittade vad mitt problem var.

Orginalet av koden var

  function &add_child (&$xml_node) {
    return ($this->_children[] = $xml_node);
  }

Vilket returnerade TRUE om det var samma, jag skrev fel i min korrigering av koden så den returnerade värdet ist för TRUE/FALSE.

133 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)