vererbung und member

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

  • vererbung und member

    ich sitzte nun schon einige zeit bei diesem problem und komm nicht drauf:
    Ich habe eine basisklasse und eine abgeleitete. es funktioniert alles gut aber wenn ich kann nicht auf ein protected member der basisklasse zugreifen. die werte werden nicht übernommen.
    PHP-Code:
    abstract class PlaylistCreator
        
    {
        protected 
    $items;
            
            public function 
    __construct()
            {
                
    $this->items = array();
            }
            
            
        public function 
    addItem($item)
        {
            
    $this->items[] = $item;
        }

        abstract public function 
    create();        
     }

    class 
    PLSCreator extends PlaylistCreator
    {
        private 
    $pls;
        
        public function 
    __construct()
        {
            
    parent::__construct();
            
    $this->pls "";
        }
        
        public function 
    create()
        {
            
    print_r($this->get()); 
    //HIER wird immer nur ein leeres array ausgeben
    //, aber es sind werte darin gespeichert
             
    return ...;            
        }

    danke für die antwort

  • #2
    wo soll denn die methode get() definiert sein?
    Schonmal mit
    PHP-Code:
    error_reporting(E_ALL); 
    probiert?

    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
      oh sry... war eine falsche version.. aber es funktioniert trotzdem nicht
      error_reporting(E_ALL) bringt nichts
      die funktion create sieht so aus:
      PHP-Code:
      public function create()
          {
              
      print_r($this->items); 
      //HIER wird immer nur ein leeres array ausgeben
      //, aber es sind werte darin gespeichert
               
      return ...;            
          } 

      Kommentar


      • #4
        funktioniert so bei mir einwandfrei...

        PHP-Code:
        <?php

        abstract class PlaylistCreator {
            protected 
        $items;

            public function 
        __construct() {
                
        $this->items = array();
            }

            public function 
        addItem($item) {
                
        $this->items[] = $item;
            }

            abstract public function 
        create();
        }

        class 
        PLSCreator extends PlaylistCreator
        {
            private 
        $pls;

            public function 
        __construct() {
                
        parent::__construct();
                
        $this->pls "";
            }

            public function 
        create() {
                
        print_r($this->items);
                
        //HIER wird immer nur ein leeres array ausgeben
                //, aber es sind werte darin gespeichert
                
        return;
            }
        }

        $test = new PLSCreator();
        $test->addItem("test");
        $test->addItem("test2");
        $test->create();
        Code:
        Array
        (
            [0] => test
            [1] => test2
        )
        aber abgesehen von der Formatierung (Einrückung) hab ich nix geändert *schulter zuck*
        das Problem muss woanders liegen

        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
          ok.. danke für die schnelle antwort
          um das problem nun einzugrenzen hier weiterer code:
          PHP-Code:
          class UniversalPlaylistCreator extends PlaylistCreator
          {
              private 
          $pls;
                  public function 
          __construct($type "pls")
              {
                  
          parent::__construct();
                  
          $this->setType($type);
              }
              
              private function 
          setType($type
              {
                  switch(
          $type)
                  {
                      default:
                          
          $this->pls = new PLSCreator();
                          break;
                  }
              }
              public function 
          create()
              {
                  return 
          $this->pls->create();
              }

          also das ist auch eine abgeleitete klasse von PlaylistCreator, über die alles aufgerufen wird:
          PHP-Code:
          $m = new UniversalPlaylistCreator("pls");
          for(
          $i=0;$i<10;$i++)
          {
              
          $m->addItem("asd"); 
          }
          echo 
          $m->create(); 
          also das ist jetzt die ganze wahrheit... vlt kommt jemand darauf...
          klassenstruktur:
          PlaylistCreator (Basisklasse) vererbt auf
          -->UniversalPlaylistCreator
          -->PLSCreator

          UniversalPlaylistCreator ist mein Objekt das ich verwende, da schreibe ich dann auf die Basisklasse und lese es von PLSCreator (einer anderen Child-Klasse von PlaylistCreator ) aus...
          ist das überhaupt möglich?
          mfg und thx

          Kommentar


          • #6
            weil du Banane die Methode addItem vom falschen Objekt aufrufst... du rufst create von dem pls-Objekt IM Universal-Objekt auf, addItem rufst du aber direkt vom Universal-Objekt auf...

            PHP-Code:
            <?php

            abstract class PlaylistCreator {
                protected 
            $items;

                public function 
            __construct() {
                    
            $this->items = array();
                }

                public function 
            addItem($item) {
                    
            $this->items[] = $item;
                }

                abstract public function 
            create();
            }

            class 
            PLSCreator extends PlaylistCreator
            {
                private 
            $pls;

                public function 
            __construct() {
                    
            parent::__construct();
                    
            $this->pls "";
                }

                public function 
            create() {
                    
            print_r($this->items);
                    
            //HIER wird immer nur ein leeres array ausgeben
                    //, aber es sind werte darin gespeichert
                    
            return;
                }
            }

            class 
            UniversalPlaylistCreator extends PlaylistCreator {
                private 
            $pls;

                public function 
            __construct($type "pls") {
                    
            parent::__construct();
                    
            $this->setType($type);
                }

                private function 
            setType($type) {
                    switch(
            $type) {
                        default:
                            
            $this->pls = new PLSCreator();
                            break;
                    }
                }
                
                public function 
            create() {
                    return 
            $this->pls->create();
                }
            }

            $test = new UniversalPlaylistCreator();
            for (
            $i 0$i <= 10; ++$i) {
                
            $test->addItem($i);
            }
            $test->create();

            print_r($test);

            das print_r zeigt dir, wo deine Items landen ... und dann guck mal welches Array du abrufst!
            Code:
            Array
            (
            )
            UniversalPlaylistCreator Object
            (
                [pls:private] => PLSCreator Object
                    (
                        [pls:private] => 
                        [items:protected] => Array
                            (
                            )
            
                    )
            
                [items:protected] => Array
                    (
                        [0] => 0
                        [1] => 1
                        [2] => 2
                        [3] => 3
                        [4] => 4
                        [5] => 5
                        [6] => 6
                        [7] => 7
                        [8] => 8
                        [9] => 9
                        [10] => 10
                    )
            
            )

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

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

            Kommentar


            • #7
              ahja problem verstanden und gelöst
              big thx.. also ich wäre da jetzt nicht drauf gekommen^^

              Kommentar

              Lädt...
              X