Fatal error: Call to member function on a non-object in



  • Hi!

    Ich habe versucht ein Templatesystem (http://codewalkers.com/tutorials/58/1.html) zu benutzen. Dabei bekomme ich dann aber den folgenden Fehler:

    Fatal error: Call to a member function on a non-object in **/main.php on line 13

    Ich kann mir irgendwie nicht erklären wie der zustande kommt, denn bei mir wird

    $page = new Page(realpath("template/head.html"));
    

    vor

    $page->output();
    

    aufgerufen.
    http://www.php-fehlermeldungen.de/artikel,34,fatal-error-call-to-a-member-function-on-a-non-object-in,.html

    Auerdem sagt er ja auch, dass der Fehler in main.php zustande kommt und nicht in news.php.

    Vielleicht könnt ihr mir helfen.

    news.php

    <?php
    
    $page = new Page(realpath("template/head.html"));
    
    if(isset($_GET['language']) && !empty($_GET['language']))
    {
      language("main", $_GET['language']);
    }
    else
    {
      language("main");
    }
    
    $page->output();
    
    ?>
    

    main.php

    <?php
    
    /*
    M_* : Meta Tags etc
    L_* : Language
    I_* : Include
    P_* : Picture
    F_* : Function
    */
    
    $page->replace_tags(array(
      "m_title" => "Hier ist der Titel",
      "password" => "Passwort",
      "title" => "bla"
    ));
    
    ?>
    

    Vielen Dank schonmal für eure Hilfe.



  • Öhmmm, ohne jetzt genau aus deinem Code und der Fehlermeldung schlau zu werden.
    Aber hast du mal nach der Deklaration von $page nachgesehen was $page ist?
    is_object oder var_dump ?

    Gruß,
    Heimwerkerking



  • Du includierst doch sicher die news.php in die main.php oder?

    Wenn ja, an welcher Stelle?
    Nach oder vor dem...?

    $page->replace_tags(array(
      "m_title" => "Hier ist der Titel",
      "password" => "Passwort",
      "title" => "bla"
    ));
    


  • Also auf Killersnoop's Beitrag hin habe ich einfach mal folgendes ausprobiert.

    news.php

    <?php
    
    $page = new Page(realpath("template/head.html"));
    
    include(realpath("languages/german/main.php"));
    
    $page->output();
    
    ?>
    

    Dieser Code funktioniert auch. Ich verstehe nur nicht, wieso das nicht auch mit der language-Funktion (wie im letzten Beitrag) funktioniert.

    language.php

    <?php
    
    function language($file, $language="german")
    {
      $dir = "languages/";
      $folder = array();
      $handle = opendir($dir);
    
      while($folders = readdir($handle))
      {
        if ($folders != "." && $folders != "..") 
        {
          if(is_dir($dir))
          {
            $folder[$folders] = $folders;
          }
        }
      }
    
      if(isset($folder[$language]) && !empty($folder[$language]))
      {
        include(realpath("languages/".$language."/".$file.".php"));
      }
      else
      {
        exit("Error 006: The language is not supported");
      }
    
      closedir($handle);
    }
    
    ?>
    

    Die Funktion funktioniert, denn so includiere ich auch die error.php in der index.php



  • Killersnoop schrieb:

    Du includierst doch sicher die news.php in die main.php oder?

    Wenn ja, an welcher Stelle?
    Nach oder vor dem...?

    $page->replace_tags(array(
      "m_title" => "Hier ist der Titel",
      "password" => "Passwort",
      "title" => "bla"
    ));
    

    Nein umgekehrt. Ich includiere die main.php in die news.php.


Anmelden zum Antworten