2 Konstructor in php möglich ?



  • Hi,

    Ist es möglich 2 Kostructor in einer KLasse zu haben ?

    PHP5.

    Bye



  • Probier's doch aus 🙄



  • Hab ich natürlich schon versucht. Aber vielleicht gibt es einen anderen Syntax !!

    PS: Geht nicht :p

    bye



  • Ich nehmne mal an, du hattest schon unterschiedliche Parametersignaturen 🙄 Dann wird das wohl nicht gehen!
    Du könntest dir aber mit Hilfe von variabler Anzahl von Parametern ein Workaround basteln. 🙂



  • Hi,

    mit x Konstructoren ist es viel schönder 🙂

    Bye



  • Hast du es jetzt hinkekommen 😕 wenn ja wäre es nett, wenn du mitteilst wie es geht 🙄
    Oder habe ich dein 🙂 jetzt falsch verstanden 🤡



  • dieses workarount hatte ich mir mal kopiert. geht prima unter php4. was php5 bringt, werden wir sehen.

    <?php 
    class Base 
    { 
    	function Base() 
    	{ 
            /* 
            * Do not allow instantiation of base class. 
            * Prevent non subclass from calling constructor. (from Jonathan Griffin's article) 
            */ 
            if ( !is_subclass_of($this, "Base") ) { 
                trigger_error("Base instantiation from non subclass.", E_USER_ERROR); 
                return NULL; 
            } 
    
            $arg_list = func_get_args(); 
            $num_args = func_num_args(); 
    
            //find the apropriat constructor for this set or arguments 
            $ConstructorName = get_class($this)."_".$num_args; 
            //Call the constructor 
            if (method_exists($this, $ConstructorName)) 
            { 
                call_user_func_array (array(&$this, $ConstructorName), $arg_list); 
            } 
            else 
            { 
                trigger_error("No apropriate constructor found.", E_USER_ERROR); 
                return NULL; 
            } 
    
            //Initiate the destructor 
            $DestructorName = "__".get_class($this); 
            register_shutdown_function(array(&$this, $DestructorName)); 
        } 
    
    } 
    
    class Derived extends Base 
    { 
        //constructors 
        function Derived_0() 
        { 
            echo "I am the constructor of Derived Class (0 arguments)<br>"; 
            return true; 
        } 
        function Derived_1($argument) 
        { 
            echo "I am the constructor of Derived Class (1 argument =".$argument.")<br>"; 
            return true; 
        } 
    
        //the destructor function 
        function __Derived() 
        { 
        } 
    } 
    
    //$obj_base = new Base(); 
    $obj0 = new Derived(); 
    $obj1 = new Derived("Cool"); 
    //$obj2 = new Derived("Cool", "Cool"); 
    ?>
    


  • Hatte das Problem auch vor paar Tagen, aber leider geht mit PHP nur ein Konstruktor, also muss man das mit Tricks umgehen, wenn überhaupt. 😉



  • @Strogij

    ein "trick" wäre der von mir gepostete..
    lies mein beispiel nochmal durch.

    gebraucht werden die von flenders gelinkten funktionen

    func_get_args();  
              func_num_args();
    

    und dann zum bleistift wie oben eingesetzt ergibt es ein klassisches workaround für die nutzung von konstruktoren mit verschiedenen parametern.
    kannst du dann noch erweitern, so wie es gebraucht wird.
    bye


Log in to reply