[OOP] Factory Pattern - Dynamisch erzeugten Objekten Argumente übergeben

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [OOP] Factory Pattern - Dynamisch erzeugten Objekten Argumente übergeben

    hi com,

    ich habe erade das problem, dass ich zur laufzeit dynamisch erzeugten objekten argumete übergeben will, nur leider finde ich in der php referenz nichts dazu...
    hoffe ihr wisst wie es geht, ohne eval

    PHP-Code:
    class ClassLoader{
        
        private 
    $_className;
        private 
    $_args;
        
        
    /* *****************************
        *     Konstruktor
        * ******************************/
        
    function ClassLoader($className$args){
            
    $this->_className $className;
            
    $this->_args $args;
        }
        
        
    /* *****************************
        *     Neue Instanz der Klasse erzeugen und zurückgeben
        * ******************************/

        
    public function createInstance(){
    [
    b]wie hier aber $this->_args  übergeben ?[/b]
            return new 
    $this->_className;
        }    
        


  • #2
    call_user_func_array ?
    Hab jetzt den Code nicht wirklich verstanden, aber das wäre so das einzige was mir einfallen würde - ansonsten Reflection-Class

    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
    Wie man Fragen richtig stellt

    Kommentar


    • #3
      also ganz einfach :

      ich habe mehrere datenbank "treiber" jeweils als einzelne classes.
      je nachdem welcher treiber in der config angegeben ist, soll der entsprechende treiber geladen werden.

      anstatt, dass ich direkt im code schreiben muss, was a) zu umständlich, b) zu unhandlich und c) zu unflexibel ist:

      PHP-Code:
      switch $datenbanktreibername{

      case 
      'MySql_default':
      $_database = new MySql_default($host$user$passwd$name);
      break;

      case 
      'MsSql':
      $_database = new MsSql($host$user$passwd$name);
      break;

      erzeuge ich die jeweiligen instanzen, mit hilfe des "Factory Pattern"
      -> http://www.php.net/manual/de/language.oop5.patterns.php

      PHP-Code:
      $_database = new $datenbanktreibername
      macht das gleiche wie das obere, nur wesentlich flexibler.
      der Klasse ClassLoader übergebe ich halt dann nur den namen der jeweiligen Klasse von der eine Instanz erzeugt werden soll und die argumente(als array) die dem zu erzeugendem objekt im konstruktor übergeben werden sollen.

      mein porblem ist jetzt nur, wie ich da jetzt argumente für den konstruktor übergebe.
      weil einfach den konstruktor aufrufen ist auchnicht sinn der sache.

      und sowas wie eval is mir zu sehr getrixt :

      PHP-Code:

      eval('$_database = new '.$datenbanktreibername.'('.$host.','$user','$passwd','.$name    ');'
      also das ist konkret mein problem....hoffe jetzt ists klar, was ich meine

      Kommentar


      • #4
        Wie ich schon sagte, vernünftig nur mit der Reflection Class
        http://de.php.net/call_user_func_array#74427

        Ansonsten die Parameter ausradieren, z.B. per separater Konfig-Klasse als Singleton - dann kann man das ganze einfacher gestalten~

        Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

        bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
        Wie man Fragen richtig stellt

        Kommentar


        • #5
          ahhhh genau ie paar zeilen hab ich gesucht, daaaaanke

          Kommentar

          Lädt...
          X