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

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • [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

    Comment


    • #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

      Comment


      • #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

        Comment


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

          Comment

          Working...
          X