php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 26-07-2007, 22:41
rundmc
 Registrierter Benutzer
Links : Onlinestatus : rundmc ist offline
Registriert seit: Jul 2007
Beiträge: 36
rundmc ist zur Zeit noch ein unbeschriebenes Blatt
Standard Von Klasse auf globale Variabel zugreifen

Hallo Ihr,

Hab eine datei(common.php) die auf jede einzelne seite(seite1.php,seite2.php,...) eingebunden wird.
In der common.php wird auch eine verbindung zur datenbank hergestellt, dessen rückgrabewert ich in die variabel $connection lege.

Nun ist mein problem, dass ich in einigen klassen die mysql verbindung benötige, also die $connection.
Weil mysqli_query arbeitet ja mit diesen syntax ($connection, "SELECT...").

Jetzt ist das ziemlich blöd, weil ich die $connection nicht in die klasse bring, und ich will sie auch nicht gern mit einem parameter an die klasse übergeben.

Hab schon versucht mittels global die $connection in die klasse zu bringen, leider vergebens.

Wie würdet ihr dieses Problem am besten lösen, oder habt ihr irgendwelche gedankenanstöße?

Ich hoffe ihr denkt euch nicht wieder, dass ich euch ausnutze

danke
mfg
Mit Zitat antworten
  #2 (permalink)  
Alt 26-07-2007, 22:52
Griecherus
 PHP Senior
Links : Onlinestatus : Griecherus ist offline
Registriert seit: May 2005
Ort: Berlin
Beiträge: 1.036
Griecherus ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Klassen und global sind in der Regel ein Zeichen dafür, dass irgendetwas schief gelaufen ist. Es ist nicht im Sinne der OOP. Von Klassen benötigte Parameter sollten an den Konstruktor der jeweiligen Klassen übergeben werden, oder man arbeitet mit dem Singleton-Entwurfsmuster.

PHP-Code:

// a.php

class DatabaseConnection
{
    public 
$connection;

    public function 
__construct()
    {
        
$this->connect();
    }

    public function 
connect()
    {
         
$this->connection connect_to_db();
         return 
$this->connection;
    }
}

$db_conn = new DatabaseConnection();

// b.php

class Test
{
    private 
$_db_connection;

    public function 
__construct(DatabaseConnection $db_conn)
    {
        
$this->_db_connection $db_conn;
    }
}

$test = new Test($db_conn); 

Geändert von Griecherus (26-07-2007 um 23:05 Uhr)
Mit Zitat antworten
  #3 (permalink)  
Alt 26-07-2007, 23:12
rundmc
 Registrierter Benutzer
Links : Onlinestatus : rundmc ist offline
Registriert seit: Jul 2007
Beiträge: 36
rundmc ist zur Zeit noch ein unbeschriebenes Blatt
Standard

danke erstmal.

hab mir das jetzt ein bisschen angeschaut, aber ich versteh den sinn von der a.php nicht.

da wird doch eine neu verbindung zur mysql_db hergestellt, kann ich nicht mit meiner $connection in der common.php weiterarbeiten?

Und die parameter an den constructer schicken würde ich auch gern umgehen.

weil ich denk mir dass das mit der zweiten mysql_verbindung auch in die performance geht, oder lieg ich da falsch?

mfg
Mit Zitat antworten
  #4 (permalink)  
Alt 26-07-2007, 23:30
Griecherus
 PHP Senior
Links : Onlinestatus : Griecherus ist offline
Registriert seit: May 2005
Ort: Berlin
Beiträge: 1.036
Griecherus ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von rundmc
danke erstmal.

hab mir das jetzt ein bisschen angeschaut, aber ich versteh den sinn von der a.php nicht.

da wird doch eine neu verbindung zur mysql_db hergestellt, kann ich nicht mit meiner $connection in der common.php weiterarbeiten?

Und die parameter an den constructer schicken würde ich auch gern umgehen.

weil ich denk mir dass das mit der zweiten mysql_verbindung auch in die performance geht, oder lieg ich da falsch?

mfg
Du hast den Sinn meines Postings falsch verstanden, glaube ich.
Das ist nur ein abstraktes Beispiel gewesen, wie man Parameter an eine Klasse übergibt, um dir die Herangehensweise zu verdeutlichen.

Aus welchem Grund möchtest du denn vermeiden, den Klassen die benötigten Parameter über den Konstruktor zu übergeben? Alternativ gibt es noch Singleton Entwurfsmuster, das aber auch nicht unbedingt missbraucht werden sollte.

PHP-Code:

// a.php

class DatabaseConnection
{
    private static 
$_instance null;

    public static function 
get_instance()
    {
        if (
self::$_instance === null)
        {
            
self::$_instance = new DatabaseConnection();
        }

        return 
self::$_instance;
    }

    public function 
connect()
    {
        
$connection connect_to_db();
        return 
$connection;
    }
}

// b.php

class Test
{
    public function 
do_something()
    {
        
$db_conn DatabaseConnection::get_instance();
        
$db_conn->connect();
    }
}

$test = new Test();
$test->do_something(); 
Mit Zitat antworten
  #5 (permalink)  
Alt 26-07-2007, 23:37
rundmc
 Registrierter Benutzer
Links : Onlinestatus : rundmc ist offline
Registriert seit: Jul 2007
Beiträge: 36
rundmc ist zur Zeit noch ein unbeschriebenes Blatt
Standard

ok, danke

dann werd ich wohl die parameter an die klasse übergeben müssen.
Leider

mfg peter
Mit Zitat antworten
  #6 (permalink)  
Alt 26-07-2007, 23:42
Griecherus
 PHP Senior
Links : Onlinestatus : Griecherus ist offline
Registriert seit: May 2005
Ort: Berlin
Beiträge: 1.036
Griecherus ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von rundmc
ok, danke

dann werd ich wohl die parameter an die klasse übergeben müssen.
Leider

mfg peter
Ich habe das Gefühl, dass du nicht wirklich auf meine Postings eingehst..
Wenn du nichts sagst, kann dir auch nicht geholfen werden.
Parameter an eine Klasse zu übergeben ist der gebräuchlichste Weg, deswegen frage ich mich bzw. dich, inwiefern das problematisch für dich ist (abgesehen von dem Aufwand, die jeweiligen Klassen zu modifizieren).
Mit Zitat antworten
  #7 (permalink)  
Alt 27-07-2007, 02:40
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard Re: Von Klasse auf globale Variabel zugreifen

Ich verstehe eines nicht: Du programmierst objektorientiert, verwendest aber die mysqli-Funktionen.

Sei einfach konsequent!

$mysqli_obj = new mysqli(...);
$mysqli_obj->query(...);


@topic: Dein Problem ist eigentlich ein anderes als du glaubst Es geht nicht darum, wie man am saubersten eine globale DB-Verbindung in der DB-Klasse verfügbar macht. Dein Fehler ist, dass du überhaupt eine globale Verbindung hast!
Statt irgendwo dein $connection zu erzeugen (oder besser $mysqli_obj) solltest du an eben dieser Stelle lieber deine DB-Klasse instanziieren und diese stellt in ihrem Konstruktor die Verbindung zur DB her.
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 08:58 Uhr.