mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Do 25.04.2024 12:45 Benutzername: Passwort: Auto-Login

Thema: PHP: Klasse innerhalb einer Funktion nutzen? vom 08.09.2010


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> PHP: Klasse innerhalb einer Funktion nutzen?
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?

Antworten mit Zitat Zum Seitenanfang

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.
  View user's profile Private Nachricht senden
easteregg

Dabei seit: 15.02.2003
Ort: Deutschland
Alter: 36
Geschlecht: Männlich
Verfasst Mi 08.09.2010 01:26
Titel

Antworten mit Zitat Zum Seitenanfang

Code:
global $tmpl;
nach Funktions-Öffnung sollte klappen. Aber nicht hauen, wenn nicht - bin auch kein Klassen-Kenner, kann aber Google benutzen *Thumbs up!*
  View user's profile Private Nachricht senden
Anzeige
Anzeige
bacon

Dabei seit: 24.10.2007
Ort: -
Alter: -
Geschlecht: -
Verfasst Mi 08.09.2010 09:49
Titel

Antworten mit Zitat Zum Seitenanfang

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/
  View user's profile Private Nachricht senden
DerM

Dabei seit: 18.01.2009
Ort: -
Alter: 42
Geschlecht: Männlich
Verfasst Mi 08.09.2010 10:09
Titel

Antworten mit Zitat Zum Seitenanfang

Schon mal versucht die Klasse überhaupt aufzurufen ??
Code:
$tmpl = new DeineKlasse();
  View user's profile Private Nachricht senden
superheld
Threadersteller

Dabei seit: 12.05.2009
Ort: -
Alter: -
Geschlecht: -
Verfasst Fr 10.09.2010 21:12
Titel

Antworten mit Zitat Zum Seitenanfang

Mit global geht es. Oder ich übergebe $tmpl einfach mit in die Funktion Lächel

@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.
  View user's profile Private Nachricht senden
bacon

Dabei seit: 24.10.2007
Ort: -
Alter: -
Geschlecht: -
Verfasst Fr 10.09.2010 21:52
Titel

Antworten mit Zitat Zum Seitenanfang

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.
  View user's profile Private Nachricht senden
DEKONSTRUKTIV

Dabei seit: 22.06.2009
Ort: bln
Alter: -
Geschlecht: -
Verfasst Sa 11.09.2010 03:39
Titel

Antworten mit Zitat Zum Seitenanfang

das is doch echt vergebene liebesmüh.
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
 
Ä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 ?
Neues Thema eröffnen   Neue Antwort erstellen
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.