Co dokładnie może oznaczać taki fatal error?

0

"Fatal error: Uncaught Error: Call to a member function getTitle() on string in D:\xampp\htdocs\index4.php:19 Stack trace: #0 D:\xampp\htdocs\index4.php(46): music_shop\XMLMusicWriter->writeToXMLFile() #1 {main} thrown in D:\xampp\htdocs\index4.php on line 19"

namespace music_shop;
    include 'MusicShopWriter.php';
    include 'MusicProduct.php';
    


    class XMLMusicWriter extends MusicShopWriter {
        
        public function writeToXMLFile(){
            
            $writer = new \XMLWriter();
            $writer->openMemory();
            $writer->startDocument('1.0', 'UTF-8');
            $writer->startElement("albums");
            foreach ($this->albums as $musicProduct) {
                $writer->startElement("album");
                    $writer->startElement("title");
                    $writer->text($musicProduct->getTitle());
                    $writer->endElement();
                    $writer->startElement("artist");
                    $writer->text($musicProduct->getArtist());
                    $writer->endElement();
                    $writer->startElement("producer");
                    $writer->text($musicProduct->getProducer());
                    $writer->endElement();
                    $writer->startElement("price");
                    $writer->text($musicProduct->getPrice());
                    $writer->endElement();
                $writer->endElement();
            }
            $writer->endElement(); // products
            $writer->endDocument();
            print $writer->flush();

        }
    }
    $title = isset($_POST['title']) ? $_POST['title'] : '';
    $artist = isset($_POST['artist']) ? $_POST['artist'] : '';
    $producer = isset($_POST['producer']) ? $_POST['producer'] : '';
    $price = isset($_POST['price']) ? $_POST['price'] : '';
    $musicProduct = new MusicProduct($title,$artist,$producer,$price);
    $xmlMW = new XMLMusicWriter();
    //$musicProduct = new MusicProduct($title,$artist,$producer,$price);
    $xmlMW->addAlbum($musicProduct);
    $xmlMW->writeToXMLFile();
?>

3

Ten błąd oznacza dokładnie to, co jest w nim napisane: najwyraźniej we wskazanym miejscu $musicProduct jest ciągiem znaków, a nie obiektem klasy MusicProduct.

0

@Patryk27: Okej, rozumiem. Mam jednak taki problem, co zrobić aby dodać wartość String w elemencie xml np. <title>(tutaj tekst)</title>? Bo rzecz w tym, że w tej pętli właśnie to chcę zrobić, tzn. dodaje wartości w formie, przesyłam je do tej pętli i przy pomocy $musicProduct->getTitle() chcę po prostu dopisać wartości w znacznikach xml.

Bo czytam dokumentację i jakoś nie mogę znaleźć odpowiedniej funkcji.

0

Kurka wodna. Dlaczego byt, który jest wszędzie obiektem, w pętli foreach jest stringiem? ;-)))))))))))
Sprawdziłem wszystko var_dumpem i faktycznie, w pętli $musicProduct jest stringiem. Kurde no;-))

3

A co masz w $this->albums ?

0

@jurek1980: No właśnie OBIEKT !! ;-)) Stringa odnośnie pętli foreach mam tylko w tej pętli właśnie.

0

Wrzuć więcej kodu - najlepiej jakieś MCVE, które będziemy w stanie uruchomić lokalnie :-)

1
finito napisał(a):

No właśnie OBIEKT !! ;-)).

No to teraz zastanów się. Skoro masz jeden obiekt to co się dzieje kiedy odnosisz się do niego w pętli.
Jak np. odniesiesz się w pętli do zwykłego łańcucha to co się stanie?

$string = 'lancuh';
foreach($string as $wtf){
    echo $wtf; // to tu masz cały łańcuch czy może coś innego?
}
0

dokładnie oznacza:

Błąd krytyczny: nieprzechwycony Błąd: wywołanie funkcji składowej getTitle () na łańcuchu w D: \ xampp \ htdocs \ index4.php: 19 Ślad stosu: # 0 D: \ xampp \ htdocs \ index4.php (46): music_shop \ XMLMusicWriter-> writeToXMLFile () # 1 {main} wrzucony do D: \ xampp \ htdocs \ index4.php w linii 19 "

1 użytkowników online, w tym zalogowanych: 0, gości: 1