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, 21: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, 21: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 22:05 Uhr)
Mit Zitat antworten
  #3 (permalink)  
Alt 26-07-2007, 22: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, 22: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, 22: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, 22: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, 01: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

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 22:05 Uhr.