Portal > Foren > PHP > PHP-Programmierung > Smarty+OOP
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 19.07.2007, 14:27 Nach oben    #1
Neuer Benutzer
 
Registriert seit: 18.07.2007
Beiträge: 15
Standard Smarty+OOP

Hallo,

ich erstelle meine ganzen seiten mit smarty. da ich nun aber mit oop angefangen habe, hätt ich mal ne frage.

und zwar habe ich eine configdatei wo smarty mit "new smarty" aufgerufen wird.

dann habe ich die index.php über die alles läuft, login, register usw., und diese includiert config.

dann habe ich meine classen welche ebenfalls die config benötigen.

also heißt das doch, das smarty in jeder datei verfügbar sein sollte.
aber wenn ich in der classe $this->smarty->assign z.b. aufrufe, nölt der das er smarty nicht kennt.

ich habe in der klasse folgendes:
PHP-Code:
class ...
var 
$smarty;
function ...(
$params)
{
this->smarty $smarty;
$this->smarty->assign("var",$var);

auf jedenfall finde ich den fehler nicht.
weil ich müsste dann ja auch im tpl das $var benutzen können.
xpprem ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.07.2007, 14:32 Nach oben    #2
Neuer Benutzer
 
Benutzerbild von N!cKY
 
Registriert seit: 03.03.2006
Ort: Msobach
Beiträge: 14
Standard

$smarty wurde außerhalb der funktion definiert und liegt nicht in deren zugriffsbereich.
du kannst mit dem "global" stichwort, die variable in der funktion erreichbar machen, also:
PHP-Code:
class ...
var 
$smarty;
function ...(
$params)
{
  global 
$smarty;
  
this->smarty $smarty;
  
$this->smarty->assign("var",$var);

__________________
Mein Blog: nicky.nubbel.info
N!cKY ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.07.2007, 14:50 Nach oben    #3
Neuer Benutzer
 
Registriert seit: 18.07.2007
Beiträge: 15
Standard

super, danke so funktionierts.
wär zwar schöner, wenn ich es nicht ständig in jeder funktion als global deklarieren muß, aber so gehts auch.
xpprem ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.07.2007, 15:28 Nach oben    #4
Blubb... öfz
 
Benutzerbild von ljungi
 
Registriert seit: 16.03.2006
Ort: Berlin
Beiträge: 419
Standard

Warum übergibst du der Klasse nicht einfach das Objekt? Dann brauchst du auch nicht immer global davorsetzen
__________________
Vive la France! Welcome to Sarkoworld...
ljungi ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.07.2007, 15:30 Nach oben    #5
Martin Eisengardt
 
Registriert seit: 30.03.2006
Ort: Pfinztal
Beiträge: 355
Standard

Als Alternative ab PHP5:
Grundlegende Frage zur Objektorientierung / OOP
__________________
Open Sourcing the Online Gaming Universe
PHP/SQL/Java/C++/Assembler.
Seit Jahren Mitglied und Entwickler in einem der wohl größten Java-Projekte der Welt: http://weblogs.java.net/blog/hansmul...e_desktop.html
mepeisen ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.07.2007, 17:07 Nach oben    #6
Benutzer
 
Registriert seit: 18.06.2006
Ort: Straubing
Beiträge: 85
Standard

Ich würde dir zu letzerem raten. Ich hatte schoneinmal selbst das gleiche Problem. Bei wir war es so, dass wenn ich nun auch noch eine Datenbank-Klasse benutzen wollte sprich nochmals zusätzlich zu global $smarty, global $db geschrieben habe, dass sich diese beiden praktisch gegenseitig sperrten!

Mfg, berti
Berti ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.07.2007, 08:18 Nach oben    #7
Neuer Benutzer
 
Registriert seit: 18.07.2007
Beiträge: 15
Standard

erstmal danke an euch alle.
habe noch etwas im netz gestöbert nach singleton, und ich denke, das wird die einfachste und sauberste lösung sein.
nur irgendwie steh ich auf dem schlauch.
ich erstelle also das singleton.
jenachdem welches modul ich aufrufe, includiere ich die klasse und starte diese über singleton? ist das so korrekt?
und dann ist diese klasse global verfügbar?
xpprem ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.07.2007, 12:39 Nach oben    #8
Benjamin Steininger
 
Benutzerbild von robo47
 
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.203
Standard

Les dir vielleicht mal das hier noch durch:

http://www.phpbar.de/w/Singleton

da ist ein Beispiel gebracht wie man das ganze nutzen kann, besonders interessant das 2te Muster in Form einer Registry, damit kannst du mehr als 1 Objekt verwalten und von überall darauf zugreifen.
robo47 ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.07.2007, 14:32 Nach oben    #9
Martin Eisengardt
 
Registriert seit: 30.03.2006
Ort: Pfinztal
Beiträge: 355
Standard

Und zum Beabtworten der Fragen:
Zitat:
Zitat von xpprem Beitrag anzeigen
jenachdem welches modul ich aufrufe, includiere ich die klasse und starte diese über singleton? ist das so korrekt?
und dann ist diese klasse global verfügbar?
Jein. Du musst ja grundsätzlich ein Skript, was eine Funktion/Klasse enthält via include_once bzw. require_once laden. Eben weil eine einmal bekannte Klasse nciht nochmal neu definiert werden darf. Damit dürfte sich der Rest der Annahme erübrigt haben, denn tatsächlich wird die Klasse nur einmal definiert und einmal geladen.
Klassen sind - wie Funktionen - in PHP immer global verfügbar. Einmal geladen kannst du aus jedem Folgescript darauf zugreifen, auch ohne extra include, bis dein Request fertig ist. Ein neuer Request startet logischerweise wieder bei 0 und includiert amAnfang wieder die Klasse.

Das static Keyword bewirkt, das die zugehörige Variable genau einmal existiert, nämlich im Kontext deiner Klasse. Völlig egal, ob du neue Instanzen anlegst. Die statische Variable gibt es nur einmal. Das macht ein Singleton aus.
Die Methode getInstance dient "nur" dazu, bei Bedarf eine neue Objekt-Instanz anzulegen, so dass du immer nur exakt eine Objektinstanz hast und nie mehr. Diese Objekt-Instanz merkt es sich in einer statischen Variable.
__________________
Open Sourcing the Online Gaming Universe
PHP/SQL/Java/C++/Assembler.
Seit Jahren Mitglied und Entwickler in einem der wohl größten Java-Projekte der Welt: http://weblogs.java.net/blog/hansmul...e_desktop.html
mepeisen ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.07.2007, 14:39 Nach oben    #10
Neuer Benutzer
 
Registriert seit: 18.07.2007
Beiträge: 15
Standard

super, danke euch beiden, jetzt funktioniert es.
xpprem ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
PingBacks sind an
RefBacks sind aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Smarty und number_format() Berti PEAR, PECL und Frameworks 12 23.02.2007 04:39
Navigation auf Smarty umstellen?! napsio PEAR, PECL und Frameworks 4 25.01.2006 19:22
[PHP] OOP - eine Einführung MrNiceGuy Tutorials 16 11.11.2005 00:05
PEAR Alternative zu Smarty ex³ PEAR, PECL und Frameworks 5 08.11.2005 21:19
Wie beginnne ich eine Seite mit Oop richtig? ex³ PHP-Programmierung 9 01.11.2005 17:38


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:36 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45