php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2007

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 28.03.2007, 12:46  
Erfahrener Benutzer
 
Registriert seit: 17.11.2003
Beiträge: 212
R4v3r
Standard Geltungsbereich mysqli Objekt

Hallo!

Ich bin gerade dabei, meine Scripte an das objektorientierte MySQLi anzupassen.

Dabei ist mir aufgefallen, dass das Objekt ($db) in keiner der Funktionen gültig ist.

Muss ich das jetzt in jeder Funktion mit "global $db;" ändern, oder gibt es einen Befehl, den ich nur einmal verwenden brauche, um den gleichen Effekt zu erziehen?

Vielen Dank!
R4v3r ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 28.03.2007, 12:50  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Entweder per Singleton reinladen oder $GLOBALS['db'] nutzen. Deine Skripte sind dann aber nur bedingt wiederverwendbar.
Zergling-new ist offline  
Alt 28.03.2007, 12:51  
Neuer Benutzer
 
Registriert seit: 28.03.2007
Beiträge: 3
sw-22
Standard

R4v3r
Version mysql?

cool manual SQL >> http://criovatcompany.com/services.html
__________________
www.page-secure.com
sw-22 ist offline  
Alt 28.03.2007, 13:18  
Erfahrener Benutzer
 
Registriert seit: 03.03.2007
Beiträge: 112
Schnulli
Standard

Guckst Du http://www.php.net/manual/de/languag...bles.scope.php
Schnulli ist offline  
Alt 28.03.2007, 13:28  
Erfahrener Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 1.976
KingCrunch befindet sich auf einem aufstrebenden Ast
KingCrunch eine Nachricht über ICQ schicken KingCrunch eine Nachricht über AIM schicken KingCrunch eine Nachricht über MSN schicken KingCrunch eine Nachricht über Yahoo! schicken
Standard

Oder (falls du sie in einer Objekt reinlädst) als Objektvariable speichern. Dann is sie im ganzen Objekt per $this->db verfügbar
__________________
Nicht jeder Fehler ist ein Bug.
KingCrunch ist offline  
Alt 28.03.2007, 18:16  
Erfahrener Benutzer
 
Registriert seit: 17.11.2003
Beiträge: 212
R4v3r
Standard

Hallo!

Danke für die Hilfe!

Habe mich nun doch dazu entschlossen das "global $db;" in jede Funktion zu schreiben, da dies die einfachste und beste Lösung zu sein scheint.
R4v3r ist offline  
Alt 28.03.2007, 18:27  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Wie es halt so ist, die einfachste ist gleichzeitig auf die schlechteste Lösung!

Hier hatte ich schoneinmal ein Posting dazu verfasst:
http://www.phpfriend.de/forum/ftopic61466.html#424112
(vielleicht besser den ganzen Thread lesen)

Mach es lieber von Anfang an Richtig, übergebe deinem Konstruktor den Datenbank-Link (Rückgabewert von mysql_(p)connect) und speichere ihn als Objekt-Eigenschaft ($this->db).

Es ist ein minimaler Mehraufwand, aber du machst es dafür gleich richtig.
Zergling-new ist offline  
Alt 28.03.2007, 18:31  
Erfahrener Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 1.976
KingCrunch befindet sich auf einem aufstrebenden Ast
KingCrunch eine Nachricht über ICQ schicken KingCrunch eine Nachricht über AIM schicken KingCrunch eine Nachricht über MSN schicken KingCrunch eine Nachricht über Yahoo! schicken
Standard

Interessant, hast die Schlechteste erwischt ^^ Der globale Geltungsbereich sollte so frei wie möglich gehalten werden. Bei dir gäbe es nun noch die besseren Varianten:

1. $GLOBALS
PHP-Code:
$GLOBALS['db'] = $db;

// some code

function xy ($x,$y) {
  
$db $GLOBALS['db'];

2. Als Parameter (besser!)
PHP-Code:
function xy ($x$y$db) {
  
// $db existiert jetzt hier;)

Problem ist, dass globale Variablen mehr Probleme verursachen, als das sie nützen. Irgendwann kommt es zu einem Fehler und man sucht tagelang nach der Ursache (und das darfst du wörtlich nehmen ). Mit den anderen beiden Methoden kannst du einfach stärker kontrollieren was wie worein kommt.


Edit: Mist, da warste schneller Aber soweit ich das verstanden habe, will er selbst nur Funktionen schreiben, keine Klassen.
__________________
Nicht jeder Fehler ist ein Bug.
KingCrunch ist offline  
Alt 28.03.2007, 19:41  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

$GLOBALS ist übrigens genauso schlecht wie global
Zergling-new ist offline  
Alt 28.03.2007, 19:51  
Erfahrener Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 1.976
KingCrunch befindet sich auf einem aufstrebenden Ast
KingCrunch eine Nachricht über ICQ schicken KingCrunch eine Nachricht über AIM schicken KingCrunch eine Nachricht über MSN schicken KingCrunch eine Nachricht über Yahoo! schicken
Standard

Naja, seh ich etwas anders, da man die Werte in $GLOBALS nicht einfach "aus Versehen" durch "ungünstig Wahle eines Variablenbezeichners" versauen kann Nungut, geb dir aber Recht, ich selbst benutzt auch nur noch Klassen-/Objektvariablen und Parameter und bisher gabs nix, was auf diesen Weg nicht lösbar war.
__________________
Nicht jeder Fehler ist ein Bug.
KingCrunch ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

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 are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Schützt mysqli vor SQL-Injections? snatch-ic Datenbanken 6 08.08.2009 15:49
Objekt im GET-Query wird nicht übertragen Ralpho PHP-Fortgeschrittene 10 05.05.2008 10:03
Krieg kein Objekt zurück auf includeter Seite NONNNNN PHP Tipps 2008 5 28.03.2008 19:25
Objekt als ComboBox behandeln Nalincah PHP Tipps 2008 2 08.11.2007 03:52
Klassensammlung über ein Objekt zur Verfügung stellen ecomeback PHP Tipps 2007 7 14.07.2007 00:01
PHP5 -> MySQLi erben snatch-ic PHP Tipps 2007 1 08.02.2007 18:05
mysqli als Objekt CC84 PHP-Fortgeschrittene 31 11.05.2006 20:39
Zugriff auf verschachteltes Objekt aus Funktion FloMX PHP-Fortgeschrittene 10 28.03.2006 17:01
[Erledigt] PHP5 OOP Zugriff aus einem Objekt auf ein externes Objekt PHP Tipps 2006 5 28.01.2006 16:05
Objekt übergeben Fatal Error PHP Tipps 2007 5 28.12.2005 14:43
MySQL vs. MySQLi Shade PHP Tipps 2007 4 05.11.2005 15:22
Objekt in Array ablegen PHP-Fortgeschrittene 9 18.08.2005 14:35
kann sich ein Objekt selbst serialisieren? ajo_silent PHP Tipps 2005-2 24 27.06.2005 09:13
Kein mysqli Objekt möglich?! Datenbanken 8 09.06.2005 18:17
[Klassen] Untereintrag für Objekt erzeugen? DannyD PHP Tipps 2005 5 17.02.2005 18:13

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
mysqli in objekt

Alle Zeitangaben in WEZ +2. Es ist jetzt 18:43 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.