Autor |
Nachricht |
superheld
Threadersteller
Dabei seit: 12.05.2009
Ort: -
Alter: -
Geschlecht: -
|
Verfasst Mi 08.09.2010 00:39
Titel PHP: Klasse innerhalb einer Funktion nutzen? |
|
|
Hallo!
Ich arbeite mit vLibTemplates um PHP und HTML zu trennen. Nun wollte ich einige Template-Variablen in einer Funktion füllen. Geht aber nicht. Fehlermeldung: Call to a member function on a non-object
mein Code:
Code: |
function get_pagedata($f_title) {
## DATEN DER SCHUHSEITE ABFRAGEN
$s_que = mysql_query("SELECT * FROM pages WHERE p_topic = '{$f_title}' LIMIT 1");
$s_arr = mysql_fetch_array($s_que);
$tmpl->setvar('p_topic', $s_arr['p_topic']);
$tmpl->setvar('p_text', $s_arr['p_text']);
}
|
Ich denke, es liegt daran, dass ich die Klasse in der Funktion nicht nutzen kann. Da ich mit Klassen mich aber nicht so auskenne, weiß ich auch keinen Lösungsansatz. Kann mir da jemand nen Tipp geben?
Danke.
|
|
|
|
|
easteregg
Dabei seit: 15.02.2003
Ort: Deutschland
Alter: 36
Geschlecht:
|
Verfasst Mi 08.09.2010 01:26
Titel
|
|
|
nach Funktions-Öffnung sollte klappen. Aber nicht hauen, wenn nicht - bin auch kein Klassen-Kenner, kann aber Google benutzen
|
|
|
|
|
Anzeige
|
|
|
bacon
Dabei seit: 24.10.2007
Ort: -
Alter: -
Geschlecht: -
|
Verfasst Mi 08.09.2010 09:49
Titel
|
|
|
Da haste aber grundsätzlich was nicht kapiert.
Zitat: | Ich arbeite mit vLibTemplates um PHP und HTML zu trennen. Nun wollte ich einige Template-Variablen in einer Funktion füllen. Geht aber nicht.
|
Deine Funktion sollte die Daten liefen (model), und Dein Controller sollte diese Daten an die View (HTML-Template) weiterleiten. Dein Model kennt weder View noch Controller.
Das global-Schlüsselwort ist ganz alter Mist aus php3-Zeiten und sollte heutzutage vermieden werden.
Weiterhin arbeitest Du nicht mit einer Klasse, sondern mit einer Instanz einer Klasse (= Objekt).
http://tut.php-quake.net/de/
|
|
|
|
|
DerM
Dabei seit: 18.01.2009
Ort: -
Alter: 42
Geschlecht:
|
Verfasst Mi 08.09.2010 10:09
Titel
|
|
|
Schon mal versucht die Klasse überhaupt aufzurufen ??
Code: | $tmpl = new DeineKlasse(); |
|
|
|
|
|
superheld
Threadersteller
Dabei seit: 12.05.2009
Ort: -
Alter: -
Geschlecht: -
|
Verfasst Fr 10.09.2010 21:12
Titel
|
|
|
Mit global geht es. Oder ich übergebe $tmpl einfach mit in die Funktion
@bacon: ?! Meine Funktion liefert doch die Daten, aber eben nur, wenn ich innerhalb der Funktion auf die Templatevariablen mit Inhalt füllen kann, um sie später im Template auch anzeigen zu können.
|
|
|
|
|
bacon
Dabei seit: 24.10.2007
Ort: -
Alter: -
Geschlecht: -
|
Verfasst Fr 10.09.2010 21:52
Titel
|
|
|
Wie gesagt, Du hast es nicht kapiert:
Du verletzt das Prinzip der separation of concerns
Was Du betreibst ist Dependency Injection, aber falsch herum... Nicht Dein Model darf Deine View kennen, sondern umgekehrt.
Was Du tust:
getData($tpl);, dann innerhalb jeder getDataXY()-Funktion wahrscheinlich irgend ein krudes Konstrukt mit mysql_fetch_array() und while (...), am ende dann tuste wie $tpl->set() die vorher zusammengebauten Daten ins Template rein.
Das ist aber völliger Kappes.
Richtig wäre:
$tpl->set('data', getData()); oder Besser noch:
$tpl->set('data', $myTable->getData());
Um mal in der von Dir bevorzugten Mischung von OOP und prozeduralem Code zu bleiben.
|
|
|
|
|
DEKONSTRUKTIV
Dabei seit: 22.06.2009
Ort: bln
Alter: -
Geschlecht: -
|
Verfasst Sa 11.09.2010 03:39
Titel
|
|
|
das is doch echt vergebene liebesmüh.
|
|
|
|
|
|
|
|
Ähnliche Themen |
C++: Template in Template-Funktion nutzen
Online-Chat Funktion - mit On und Offline Funktion
Klasse für SQL Anweisungen
SVG id aktiviert Klasse
[AS2] - Tween-Klasse verwenden
[CSS] Hover in Css Klasse einfügen ?
|
|