---
title: "\"Call to a member function on a non-object\"-problem"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/159812-call-to-a-member-function-on-a-non-object-problem"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "startail"
published: "2007-04-30T19:02:46.000Z"
updated: "2007-04-30T19:28:46.000Z"
replies: 1
views: 283
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/159812-call-to-a-member-function-on-a-non-object-problem"
---

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

## #1 — startail, 2007-04-30T19:02Z

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.

Permalänk: https://www.webforum.nu/p/159812

## #2 — startail, 2007-04-30T19:28Z

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.

Permalänk: https://www.webforum.nu/p/1970925

---

Tråden på webben: https://www.webforum.nu/amne/php/159812-call-to-a-member-function-on-a-non-object-problem
