Klasse in Funktionen nutzen?

danielmueller

Gesperrt
Ich habe mir eine mysql Klasse geschrieben um mir ein wenig die Arbeit zu erleichtern. Nun stehe ich allerdings vor einem Problem ich möchte inerhalb einer Funktion die Funktionen meiner Klasse benutzen zb um eine Query zu senden (leider sucht aber php zuerst nach Funktionen und initialisiert erst dann meine Klasse auch wenn die Funktion am Schluss steht). Ist das irgendwie möglich?
 
Natürlich geht das, warum auch nicht?

PHP:
<?php

class Foo
{
	function bar()
	{
		echo "Foobar!";
	}
}

function test()
{
	global $f;
	$f->bar();
}

$f = new Foo();
test();

?>
 
Naja bei mir geht es irgendwie nicht. Hier mein Code:
PHP:
function db_get_template ($tpl_name, &$tpl_source, &$smarty_obj)
      { 
      // Datenbankabfrage um unser Template zu laden,
      // und '$tpl_source' zuzuweisen
      $query=$mysql->query("SELECT Template FROM Test WHERE Section=$tpl_name");
      $tpl_source = $mysql->get_results($query);
	  echo "Fehler".mysql_error();
	  echo $tpl_source['Template'];
      return;
Als Fehlermeldung erhält man;
Fatal error: Call to a member function query() on a non-object in C:\apachefriends\xampp\htdocs\1.php on line 40
Ich interpretiere das so als wäre das Objekt mysql nicht initalisiert, ist es aber!
 
Woher soll denn der Parser wissen worauf $query in der Funktion verweisen soll?
Regel Nummer 1 beim Entwickeln:
PHP:
error_reporting(E_ALL);
 
Und wie kann ich das beheben? Ich habe jetzt mal versucht einfach die Klasse in der Funktion nochmal zu initialisieren. Meine Funktion sieht dann etwa so aus:
PHP:
  function db_get_template ($tpl_name, &$tpl_source, &$smarty_obj)
      { 
      // Datenbankabfrage um unser Template zu laden,
      // und '$tpl_source' zuzuweisen
	  
	       $mysql=new mysql("localhost", "root", "");
$mysql->select_db("daniel-portal");
      $query=$mysql->query("SELECT Template FROM Test WHERE Section=$tpl_name");
      $temp_tpl_source = $mysql->get_results($query);
	  $tpl_source=$temp_tpl_source['Template'];
	  //echo "Fehler".mysql_error();
	  echo "$tpl_source";
      return;
      
      }
Nun klappt es zwar aber ich kann mir irgendwie nich vorstellen das die sehr Performant ist. gibt es vielleicht noch eine andere Möglichkeit wo ich nicht in jeder Funktion ein und diesselbe Klasse initialisieren muss?
 
Zuletzt bearbeitet:
Wenn db_get_template und select_db beide Methoden der Klasse mysql sind, dann hilft dir das Schlüsselwort this weiter. Näheres gibts in der Doku und in den PHP OOP Tutorials auf dieser Seite.
 
Zurück