Hallo,
Ik heb een class ManageBooks waarin ik gegevens van een boek oproep. Nu wil ik die gegevens in mijn class XML krijgen en die dan showen met XML.
Dit is de query waar ik mijn gegevens uit de DB haal en in een query stop.


<?php
public function getBookData(){ 
    try{ 
        $oPDO = new PDO("mysql:dbname=xxx;host=xxx", "xxx", "xxx" ); 
        $oPDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); 
            $sSql ="SELECT id, Titel, Isbn, Auteur, Omschrijving FROM tbl_books WHERE id = '1'"; 
    $rResult = $oPDO->query($sSql); 
    while($aRow = $rResult->fetch(PDO::FETCH_ASSOC)){ 
        $this->m_aBookData['id'] = $aRow['id']; 
        $this->m_aBookData['Titel'] = $aRow['Titel']; 
        $this->m_aBookData['Isbn'] = $aRow['Isbn']; 
        $this->m_aBookData['Auteur'] = $aRow['Auteur']; 
        $this->m_aBookData['Omschrijving'] = $aRow['Omschrijving']; 
    } 
        return $this->m_aBookData; 
            $oPDO = NULL; 
               }catch(PDOException $oError){ 
                               echo $oError->getMessage(); 
    } 
}

?>


Wat ik nu zeg maar wil doen is een class XML extended maken van Class ManageBooks.


<?php
class XML extends ManageBook{ 
     
    public function __construct() 
    { 
        $oXML = new ManageBook
    } 
     
    public function showXML(){ 
        $objDOM = new DOMDocument(); 
        echo $objDOM->saveXML(); 
    } 
     
     
}
?>


Hoe zet ik die array met die query om naar XML in mijn XML class?
Ik heb internet helemaal afgezocht, maar het kwartje wil niet vallen hoe ik dit moet oplossen. Ik kom er echt niet uit, als iemand mij kan helpen, bedankt!
Waarom extend je ManageBook? Is XML een ManageBook? Nee, XML gebruikt slechts een ManageBook. Dus binnen XML een instantie van ManageBook gebruiken is de beste oplossing.

<?php
class XMLRepresentationOfBooks {

protected $manageBook;

public function __construct()
{
$this->manageBook = new ManageBook();
}

public function showXML()
{
$doc = new DOMDocument();
$books = $this->manageBook->getBookData();

foreach($books as $book) {
$bookElement = $doc->createElement('book');

foreach($book as $attribute => $value) {
$attributeElement = $doc->createElement($attribute);
$attributeValue = $doc->createTextNode($value);
$attributeElement->appendChild($attributeValue);

$bookElement->appendChild($attributeElement);
}

$doc->appendChild($bookElement);
}

$doc->saveXML();
}
}
?>

Je getBookData method zal trouwens niet goed werken, aangezien je $this->m_aBookData voor ieder boek overschijft. Hij zal maar 1 boek bevatten. Daarnaast, waarom gebruik je hier een property van het object voor en niet een gewone variabele? Je doet er binnen het object verder niet veel mee lijkt mij.

Als laatste kan ik het je aanraden om voor klassen altijd zelfstandige naamwoorden te gebruiken (uitzonderingen daargelaten) omdat dat simpelweg logischer is. ManageBook klinkt als een actie, terwijl je instantie eerder een BookManager is. En vang Exceptions (zoals PDOException) pas op wanneer je een alternatief kan bieden. Nu vang je de fout wel op, maar gaat je script lief door na het echo'en van die waarde, waarna er nog veel meer fout zal gaan. Als je die Exception veel later opvangt, dan heb je daar geen last van. Want nadat een Exception is gegooid zal er geen code meer worden uitgevoerd totdat hij wordt opgevangen.

Reageren