Katastrophe: Klassenproblem

Hi,

also ich habe bisher folgende Klasse:

<?php
class Dent{

function Dent()
 {
  global $SERVERROOT;
  global $CLASSESROOT;

global $dbHost;
  global $dbUser;
  global $dbPassword;
  global $dbName;

require_once($CLASSESROOT."control/db/mysql4db.class.php");
  require_once($CLASSESROOT."design/libs/Smarty.class.php");

$smarty = new Smarty;   // Create template Object
  $db = new Mysql4db($create = "", $this->dbHost, $this->dbUser, $this->dbPassword, $this->dbName); // database object

//$this->dbUser = $dbUser;

$smarty->template_dir = $SERVERROOT.'smarty/templates/';
        $smarty->compile_dir = $SERVERROOT.'smarty/templates_c/';
        $smarty->config_dir = $SERVERRROT.'smarty/configs/';
        $smarty->cache_dir = $SERVERRROT.'smarty/cache/';
 }

function writeHeader()
 {
  $smarty->assign();
  $smarty->display('header.tpl');
 }

function writeTop()
 {
  $smarty->assign('aktuelles','Hier jibt et aktuelles');
        $smarty->display('top.tpl');
 }
}

?>

In einer anderen Datei steht:
<?php
include("config.inc.php");

require_once($CLASSESROOT."dent.class.php");
$dent = new Dent;
$dent->writeTop();

?>

Nun kommt folgende Fehlermeldung:
Fatal error: Call to a member function on a non-object in d:\dentona_new\classes\dent.class.php on line 38

WARUM NUR?

Danke

  1. Hi,

    $dent = new Dent;
    $dent->writeTop();

    Nun kommt folgende Fehlermeldung:
    Fatal error: Call to a member function on a non-object in d:\dentona_new\classes\dent.class.php on line 38
    WARUM NUR?

    es ist nicht nötig zu schreien. Ohne es bei PHP speziell zu wissen: Du hast in $dent eine Referenz auf die Klasse gesetzt, anstatt eine Klasseninstanz zu erzeugen.

    Cheatah

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hi,

      $dent = new Dent;
      $dent->writeTop();

      Hier erzeuge ich doch eine Klasseninstanz.
      Verstehe ich nicht. Was genau meinst Du?

      Danke

      1. Hi,

        $dent = new Dent;
        Hier erzeuge ich doch eine Klasseninstanz.

        nun, in fast allen mir bekannten Sprachen erwarte ich in der Codezeile noch Klammern. Wenn das in PHP anders ist, ignoriere bitte mein Posting.

        Cheatah

        --
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
  2. Hi,

    ich schätze $smarty ist in den anderen Funktionen nicht bekannt. (Da wo du keine Instanz gebildet hast.
    Mach da entweder ne Instanz auf, oder besser: leg $smarty als Objekt-Eigenschaft an:

    function konstruktor()
    {
    $this->smarty = new Smarty();
    }

    function blabla
    {
    $this->smarty->assign();
    }

    ABer keine Ahnung, ob das der Fehler ist.

    Gruß
    Scooter

  3. Hi,

    include("config.inc.php");

    require_once($CLASSESROOT."dent.class.php");

    Fatal error: Call to a member function on a non-object in d:\dentona_new\classes\dent.class.php on line 38

    bei deinem Problem kann ich dir wohl leider auch nicht weiterhelfen. Du solltest Dir aber unbedingt abgewöhnen, mehr als einen Punkt in einem Dateinamen zu verwenden. (Dies kann bei manchen OS' zu Konflikten führen). Nimm stattdessen besser den "_" (Unterstrich) und nimm den Punkt lediglich für die Dateiendungskennung.

    Gruß
    Oliver