Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Funktion nimmt Parameter nicht an.

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Funktion nimmt Parameter nicht an.

    Hallo,

    ich habe ein kleines Problem. Und zwar nimmt eine Funktion die Parameter nicht an wie sie es soll. Hier mal der Ablauf des Aufrufes.

    PHP-Code:
    $this->loadModule('GroupHeaderMdl'$objGroup
    So wird ein Modul geladen. Die Variable $objGroup enthält eine Instanz der Klasse "Group" (das ist wichtig um das Problem evtl. zu verstehen).

    Die Funktion "loadModule" sieht folgendermaßen aus.

    PHP-Code:
    protected function loadModule($strClass)
        {
        if (
    class_exists($strClass))
        {
            
    $arrParams array_slice(func_get_args(), 1);
            
            
    $objClass = new $strClass($arrParams);

            return (
    $objClass);
        }
        } 
    Es Wird nun also eine Klasse Namens GroupHeaderMdl aufgerufen die wie folgt aussieht.

    PHP-Code:
    final class GroupHeaderMdl extends Module
    {
        protected 
    $strTemplate  'group/group_header.tpl';
        
        public function 
    main(Group $objGroup)
        {
        
        }

    Und genau hier tritt der Fehler auf. Es kommt die Fehlermeldung

    Code:
    Catchable fatal error: Argument 1 passed to GroupHeaderMdl::main() must be an instance of Group, null given in
    Was mich nun verwundert.

    1. Es wird alle ausgeführt was in der main() Methode steht
    2. Die Variable die übergeben wird ist ein Objekt (Klasse: Group).

    Warum zum teufel schmeisst er mir nun diesen Fehler?

  • #2
    Ich sehe in Deinem Code keinen main() Aufruf.
    [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
      Oh ganz vergessen, das passiert im Konstruktor von Module von dem alles abgeleitet wird.

      PHP-Code:
      public function __construct(array $arrParams)
          {
          
      call_user_func_array(array($this'main'), $arrParams);

          return (
      $this);
          } 
      Hab noch etwas herausgefunden. Das Objekt von Group kommt hierher.

      PHP-Code:
      list($objGroup) = $this->loadProcedure('LoadGroupPcd'); 
      Wenn ich folgendes mache, funktioniert das Ganze

      PHP-Code:
      $objGroup = new Group(); 

      Kommentar


      • #4

        PHP-Code:
        protected function loadModule($strClass)
            {
            if (
        class_exists($strClass))
            {
                
        $arrParams array_slice(func_get_args(), 1);
                
                
        var_dump ($arrParams);

                
        $objClass = new $strClass($arrParams);

                return (
        $objClass);
            }
            } 
        Und selbst herausfinden. IMHO ist das eben kein ARray.
        [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


        • #5
          Doch es ist ein Array. Das array_slice mache ich um den Modulnamen zu löschen. Ansonsten steht dort auch alles so drin wie es muss.

          Edit: Habe nun herausgefunden das meine Modulaufrufe 2x ausführt und somit mein zweiten mal keine Parameter mehr hat. Ich denke wenn ich das fixe dürfte der Fehler behoben sein.

          Kommentar


          • #6
            Zitat von stayInside Beitrag anzeigen
            Doch es ist ein Array. Das array_slice mache ich um den Modulnamen zu löschen. Ansonsten steht dort auch alles so drin wie es muss.
            Es geht um den return-wert den du dir ausserhalb mit list() zuweißen lässt und der sollte kein array sein:
            PHP-Code:
             return ($objClass); 
            also macht es imho keinen sinn list() zu nutzen wenn eh kein array zurückkommt.
            [URL="http://www.robo47.net"]robo47.net[/URL] - Blog, Codeschnipsel und mehr
            | :arrow: [URL="http://www.robo47.net/blog/192-Caching-Libraries-and-Opcode-Caches-in-php-An-Overview"]Caching-Klassen und Opcode Caches in php[/URL] | :arrow: [URL="http://www.robo47.net/components"]Robo47 Components - PHP Library extending Zend Framework[/URL]

            Kommentar

            Lädt...
            X