class() möglichst gut und effizient nutzen

ev0lst

Erfahrenes Mitglied
Hallo.

Ich arbeite mich gerade sehr gut in den Nutzen von Klassen ein. Soweit geht auch alles wie ich es will. Es gibt da nur eine Sache die mich tierisch nervt.

Ich binde die jeweiligen Klasse (in diesem Fall eine sql-Class für die Querys) in der index.php ein und binde die jeweiligen Unterseiten via include() ein. Das ist auch soweit alles klaro.

Nur habe ich noch eine func.php Datei in der alle function() sind, die man halt mal so braucht. Da einige Funktionen die ein oder andere Klasse benötigen, muss ich bisher immer auf eine neue Einbindung jeglicher Klassen zurückgreifen.

Gibt es eine Möglichkeit, alle benötigten Klassen in die func.php zu bringen, ohne in jeder function() den Aufruf zu starten, dass die jeweilige Klasse eingebunden werden soll?

Finde es für die Arbeiten immer lästig, sowas immer machen zu müssen wenn man daran arbeitet.

Jemand eine Idee?

Danke
 
Spontan fallen mir da zwei Lösungen ein:

a)
Du intialisiert einmal alle Klasse und übergibst das Objekt an die Funktion per Parameter (oder falls nicht anders lösbar per global)

b)
Du arbeitest mit einer statischen Klassenmethoden, dadurch musst du die Klasse nicht initialisieren.
Static Schlüsselwort
 
Ich bin gerade etwas durcheinander ob deiner Beschreibung. Ich vermute du meinst mit dem "Einbinden von Klassen" ein "Erstellen von Objekt aus Klasse $x". Das Includen einer Klassen-Definitionsdatei sollte man per se nur einmal machen müssen.

Zu deiner Frage: Ich versuche grade deine Gedanken zu lesen .... hmmh, hmmm.... JA, ich denke du suchst nach Singletons: http://www.tutorials.de/forum/php-tutorials/188436-singletons-mit-php5.html

Problem an der Sache, ich hab keine Ahnung, wie das mit PHP4 zu bewerkstelligen wäre, da Singletons ein paar Vorraussetzung an die Klassen-Spezifikationen geben.

Wenn du das nicht meinst, dann zeig mal ein bisschen Quellcode, das man sehen kann, was du für ein Problem hast.
 
Danke für deine Antwort.

Ich dachte ich habs gut beschrieben... ;)
Naja, es scheinen singletons zu sein, zumindest habe ich es schonmal gehört zu diesem Thema. Ich nutze php4 und will es auch weiterhin nutzen.

Eine allgemeine Lösung wäre hier echt super.
 
Dann würde sich wohl meine a) Lösung anbieten, und mit global oder als erweiterter Parameter anbieten.

:offtopic:
Ein Wechsel auf PHP5 würde sich übrigens trotzdem anbieten, vorallem da PHP4 bald "stirbt".

php.net hat gesagt.:
PHP 4 end of life announcement
[13-Jul-2007]

Today it is exactly three years ago since PHP 5 has been released. In those three years it has seen many improvements over PHP 4. PHP 5 is fast, stable & production-ready and as PHP 6 is on the way, PHP 4 will be discontinued.

The PHP development team hereby announces that support for PHP 4 will continue until the end of this year only. After 2007-12-31 there will be no more releases of PHP 4.4. We will continue to make critical security fixes available on a case-by-case basis until 2008-08-08. Please use the rest of this year to make your application suitable to run on PHP 5.

For documentation on migration for PHP 4 to PHP 5, we would like to point you to our migration guide. There is additional information available in the PHP 5.0 to PHP 5.1 and PHP 5.1 to PHP 5.2 migration guides as well.
http://www.php.net
 
Keine Garantie, dass das hier funktioniert, da ich kein PHP4 zur Verfügung habe:

PHP:
<?php
function &makeSingleton($classname)
{
    static $instances;

    if(!is_array($instances)) {
        $instances = array();
    }

    if(empty($instances[$classname])) {
        $instances[$classname] = new $classname;
    }

    return $instances[$classname];
}

class db
{
    var $variable_check = "";

    function query($sql)
    {
        echo "you want to execute query: $sql<br/>";
    }

    function echoVariableCheck()
    {
        echo $this->variable_check."<br/>";
    }
}

echo " ============ Global Scope ============== <br/><br/>";

$db =& makeSingleton('db');
$db->variable_check = "An very important value";
$db->echoVariableCheck();

$db->query("SELECT * FROM world;");

echo "<br/><br/>";



function veryImportantFunction()
{
    echo " ============ Function Scope ============== <br/><br/>";

    // Hier gilt die Variable $db im globalen Scope nicht
    $db =& makeSingleton('db');
    $db->query("UPDATE world SET clima = 'clean';");
    $db->echoVariableCheck();
}

veryImportantFunction();

?>
 
Zurück