Ankündigung

Einklappen
Keine Ankündigung bisher.

instanz einer classe (variable)

Einklappen

Neue Werbung 2019

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

  • instanz einer classe (variable)

    hallo, nochmal ein problem mit classen undzwar:

    PHP-Code:
    class classHandle
    {
        function 
    __construct($class,$handle=0)
        {
        
    $this->handle $handle;
        
    $this->className[$handle] = $class;
        
    $this->path[$this->handle] = dirname(__FILE__)."\..\classes\\".$class."\\".$class.".php";
        }
        
        function 
    load($handle=0)
        {
            if(
    file_exists($this->path[$handle]))
            {        include_once(
    $this->path[$handle]); 
            
    $this->tempClass[$handle] = new $this->className;    # <<<< fehlerzeile
            
    return true;        }
            else
            {        return 
    false;        }

        }
        
        function 
    getVar($str,$handle=0)
        {
        return 
    $this->path[$handle];
        }
        
        function 
    useIn($function,$handle=0)
        {
        if(!
    $this->tempClass[$handle]) { return false; }
        return 
    $this->tempClass[$handle]->$function();
        }

    fehler
    Code:
    Fatal error: Class name must be a valid object or a string in D:\host\xampp\htdocs\yahs\core\function.php on line 224
    die datei existiert und wird geincludet.

  • #2
    In deinem Konstruktor wird className als Array gesetzt.
    [COLOR="#F5F5FF"]--[/COLOR]
    [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
    [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
    [COLOR="#F5F5FF"]
    --[/COLOR]

    Kommentar


    • #3
      hm, ich habe gehofft das geht als array wegen der $handle

      Kommentar


      • #4
        $this->tempClass_$handle = new $this->className;



        geht auch nicht....

        PHP-Code:
        Parse errorsyntax errorunexpected T_VARIABLE in D:\host\xampp\htdocs\yahs\core\function.php on line 224 

        Kommentar


        • #5
          Nicht gleich anfangen zu raten!
          new $this->className in der Fehlerzeile benötigt wohl einen Array-Index
          [COLOR="#F5F5FF"]--[/COLOR]
          [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
          [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
          [COLOR="#F5F5FF"]
          --[/COLOR]

          Kommentar


          • #6
            $this->tempClass_$handle = new $this->className[$handle];

            änder nix, nochmal alles:



            PHP-Code:
            class classHandle
            {
                function 
            __construct($class,$handle=0)
                {
                
            $this->handle $handle;
                
            $this->className[$handle] = $class;
                
            $this->path[$this->handle] = dirname(__FILE__)."\..\classes\\".$class."\\".$class.".php";
                }
                
                function 
            load($handle=0)
                {
                    if(
            file_exists($this->path[$handle]))
                    {        include_once(
            $this->path[$handle]); 
                    
            $this->tempClass_$handle = new $this->className[$handle];
                    return 
            true;        }
                    else
                    {        return 
            false;        }

                }
                
                function 
            getVar($str,$handle=0)
                {
                return 
            $this->path[$handle];
                }
                
                function 
            useIn($function,$handle=0)
                {
                if(!
            $this->tempClass_$handle) { return false; }
                return 
            $this->tempClass_$handle->$function();
                }

            Kommentar


            • #7
              keiner ne idee?, ich will on the tly eine instanz einer classe erzeugen und diese dann über eine andere classe steuern.... geht das überhaupt so wie ich vor hatte?

              Kommentar


              • #8
                return $this->tempClass_$handle->$function();
                Was ist das denn?

                Kommentar


                • #9
                  Zitat von notyyy
                  keiner ne idee?, ich will on the tly eine instanz einer classe erzeugen und diese dann über eine andere classe steuern.... geht das überhaupt so wie ich vor hatte?
                  Irgendwie sind in letzter Zeit einige Vollmondnächte über Deutschland gezogen...

                  Was du vor hast, klingt wie ein verkapptes Factory- oder ein Builder-Pattern. Lies mal http://www.phpbar.de/w/Factory_Method durch, dann wirst du sehen, dass dieses Pattern dir sicher weiterhelfen wird.
                  Viele Grüße,
                  Dr.E.

                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                  1. Think about software design [B]before[/B] you start to write code!
                  2. Discuss and review it together with [B]experts[/B]!
                  3. Choose [B]good[/B] tools (-> [URL="http://adventure-php-framework.org/Seite/088-Why-APF"]Adventure PHP Framework (APF)[/URL][URL="http://adventure-php-framework.org"][/URL])!
                  4. Write [I][B]clean and reusable[/B][/I] software only!
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

                  Kommentar


                  • #10
                    Abgesehen davon, dass dir der Link von Dr.E. helfen wird, meinstest du evtl. so etwas:
                    classHandle.php
                    PHP-Code:
                    <?php
                    class classHandle
                    {
                        public 
                    $handle;
                        public 
                    $className;
                        public 
                    $path;
                        public 
                    $tempClass_;
                        
                        function 
                    __construct($class,$handle=0)
                        {
                            
                    $this->handle $handle;
                            
                    $this->className $class;
                            
                    $this->path dirname(__FILE__)."\classes\\".$class."\\".$class.".php"# ANPASSEN
                            
                            
                    $this->load();
                        }
                        
                        function 
                    load()
                        {
                            if(
                    file_exists($this->path))
                            {
                                include_once(
                    $this->path);
                                
                    $this->tempClass_ = new $this->className;
                                return 
                    true;
                            }else{
                                    return 
                    false;
                            }

                        }
                        
                        function 
                    getVar($str)
                        {        
                            if(!
                    $this->tempClass_)
                            {
                                return 
                    false;
                            }else{
                                return 
                    $this->tempClass_->$str;
                            }
                        }
                        
                        function 
                    useIn($fName,$handle=0)
                        {
                            if(!
                    $this->tempClass_)
                            {
                                return 
                    false;
                            }else{        
                                return 
                    $this->tempClass_->$fName();
                            }
                        }
                    }
                    ?>
                    index.php
                    PHP-Code:
                    <?
                    $test = new classHandle('testKlasse');

                    echo '<pre>';
                    var_dump($test->getVar('tag'));
                    echo '</pre>';

                    echo '<pre>';
                    var_dump($test->useIn('getTag'));
                    echo '</pre>';
                    ?>
                    classes/testKlasse/testKlasse.php
                    PHP-Code:
                    <?
                    class testKlasse
                    {
                        public $tag;
                        
                        function __construct()
                        {
                            $this->tag = date('D');
                        }
                        
                        function getTag()
                        {
                            return $this->tag;
                        }
                    }
                    ?>
                    Ein Aufruf von index.php liefert:
                    Code:
                    string(3) "Sat"
                    
                    string(3) "Sat"
                    (Ich hab einfach mal rumprobiert )
                    [FONT="Book Antiqua"][I]"Nobody is as smart as everybody" - Kevin Kelly[/I]
                    — The best things in life aren't things[/FONT]

                    Kommentar


                    • #11
                      vielen dank schonmal =)

                      so, nun weiter,
                      ein wenig schleierhaft ist mir die $tempClass_ ich hatte versucht durch die $handle zu erreichen, dass ich über meine classe mehrere classen ansprechen kann ohne eine neue instanz der classHandle zu erzeugen, diese wollte ich in der $handle einfach wieder durch nummerieren, so dass ich mehrere instanzen in meiner classHandle erzeugen kann und diese dann auch (später) wieder schließen kann, über die 2. mögliche variable jeder funktion der classHandle wollte ich dann immer die ID der classe (instanz) mit geben, so kan dann eine funktion in der instanz 4 ausgeführt werden der wert in die funktion der instanz 3 eingetragen und on the fly wieder in eine andere instanz eingetragen werden. vorraussetzung ist nur, dass php die ganzen instanzen zwischen speichert, welches ich ja über den array erledigen wollte woran ch aber kläglich scheitere. in der fcory method ist mir total schleierhaft was
                      PHP-Code:
                        throw new exception() 
                      sein kann.


                      wenn ich das richtig verstanden habe hat phpdummi diese funktion der mehreren instanzen die gleichzeitig ausgeführt werden können raus genommen ??

                      Kommentar


                      • #12
                        PHP-Code:
                        class test
                        {
                            function 
                        lol()
                            {
                            echo 
                        "lol";
                            }
                        }

                        $ich[1] = new test;
                        $ich[1]->lol(); 

                        funzt wunderbar, d.h. es kann nicht daran liegen, dass man eine instanz nicht in einem array erzeugen kann `?

                        hm... ^^

                        Kommentar


                        • #13
                          Bist du die Pappnase, die die gesamten Objekte die instanziert werden in einer Helper-Klasse sammeln will? Ich dachte das wär ein anderer gewesen oder hat der dich etwa inspiriert?
                          Lass doch den Quatsch endlich mal oder argumentier zumindest was das soll. Ich verstehe absolut nicht, bei was wir dir hier jetzt eigentlich helfen sollen und was das am Ende dann gebracht hat.

                          Kommentar


                          • #14
                            hm, mich hatte ein cms dazu inspiriert alles in einer helper classe zu sammeln, das ganze soll den sinn haben das man hinterher mehrere classen hat, es soll mehrere typen geben, eine für sture funktionen, und einige will ich über die url steueren (mod rewirite) sodass man dafür vorgesehende functionen in einer classe aufrufen (in der url), da ich momentan sowieso php in bezug mit classen lerne möchte ich sehr gerne alle classen dynamisch über eine weitere steuern und bei bedarf laden.


                            ich weiss nicht was dagegen spricht es so zu machen =)

                            wbei man mit helfen soll beschreibt der 1. post am besten, da der ansatz von phpdummi zwar gut war, aber nicht das tut was ich will, nämlich mehre instanzen über eine classe steuern.

                            PHP-Code:
                              function load($handle=0)
                                {
                                    if(
                            file_exists($this->path[$handle]))
                                    {        include_once(
                            $this->path[$handle]);
                                    
                            $this->tempClass[$handle] = new $this->className;    # <<<< fehlerzeile
                                    
                            return true;        }
                                    else
                                    {        return 
                            false;        }

                                } 
                            macht den ärger ......


                            Code:
                            n deinem Konstruktor wird className als Array gesetzt.
                            stimmt aber, das erzeugt den fehler nicht, das beispiel was ich grade brachte erzeugt auch die instanz in einem array.

                            diese factory methode ist super, jedoch steuert sie auch nur eine classe und nicht mehrere .... und nur darin liegt meine problematik...

                            Kommentar


                            • #15
                              Warum willst du denn zwei Klassen um eine zu Steuern? Das is nicht nur overized, das wird dich später auch gut verwirren ^^

                              diese factory methode ist super, jedoch steuert sie auch nur eine classe und nicht mehrere .... und nur darin liegt meine problematik...
                              Das Factory-Pattern gibt dir eine Instanz eines Objektes zurück. Gesteuert wird da nur, von welchem Typ das zurück gegebene Objekt ist.

                              Aber was bringt es dir denn überhaupt eine Klasse zum Steuern von anderen? Ich sehe da echt null Mehrwert.
                              Nicht jeder Fehler ist ein Bug.

                              Kommentar

                              Lädt...
                              X