Hallo allemaal,

Het viel me in Zend Framework op dat de functie toArray() altijd aangeroepen kan worden.
Ik vroeg me af hoe dit in kan maar kwam eigenlijk niks tegen.

Er zijn hier volgens mij wel een aantal mensen die met Zend Framework werken die misschien uit kunnen leggen hoe dit kan.

Alvast bedankt.
Kun je een voorbeeldje laten zien? Dan kan ik eens op onderzoek gaan :)
Hier haal ik in mijn controller wat data op via mijn model:
<?php
$model = new Frontend_Model_Cursusitems();
$result = $model->getFirstItem($id)->toArray();
?>
Deze kan dan via de functie toArray() erachter te zetten van een standaard Zend object omgezet worden naar een array.
Rick,

Als je een functie definieert vóórdat je je framework ingaat, dan is deze functie overal geldig (hij is globaal).

<?php

function doeIets() {

}

$application = new Application();
$application->test();

// in de functie test kun je nu de functie doeIets() gebruiken

class Application {

public function test() {
doeIets();
}

}

?>
als ik het goed begrijp ...
De vraag is dus of je een methode kan maken, die gelijk welk object van gelijk welke class kan aanroepen.
Ja dat snap ik maar hoe word de data die voor ->toArray() meegestuurd zodat deze verwerkt word?
Normaal stuur je de parameters namelijk mee doormiddel van ->toArray($data) maar hier word de data voor de toArray gebruikt.

[size=xsmall]Toevoeging op 05/02/2013 17:03:54:[/size]

Ja Kris dat plus het gene dat ik in mijn vorige post heb aangegeven.
Rick, zie de code waar ik naar linkte:
<?php
public function toArray()
{
$return = array();
foreach ($this as $row) {
if (is_array($row)) {
$return[] = $row;
} elseif (method_exists($row, 'toArray')) {
$return[] = $row->toArray();
} elseif ($row instanceof ArrayObject) {
$return[] = $row->getArrayCopy();
} else {
throw new Exception\RuntimeException(
'Rows as part of this DataSource, with type ' . gettype($row) . ' cannot be cast to an array'
);
}
}
return $return;
}
?>

Ze loopen dus over $this. Dat kan omdat $this Iterator implement, google daar maar eens op voor meer informatie over Iterators in PHP: Een van de geweldige PHP features!
Wouter,

Ik ben in de dingen rond gaan kijken die je mij hebt gegeven maar kom er nog niet uit hoe Zend ervoor zorgt dat de functie ->toArray() op elk object beschikbaar is.

Als ik namelijk fluent wil werken zal ik <?php return $this; ?> moeten gebruik om de class mee terug te sturen. Alleen als ik iets uit de database ophaal dan return ik een object <?php return $result; ?> en dan kan ik dus niet meer return $this; gebruik om de class me terug te sturen.

Hoe kan ik er dan dus toch nog voor zorgen dat ik ->toArray() kan gebruiken zonder de class zelf mee terug te sturen maar het object dat ik om wil zetten in een array.
Wel, om te beginnen, return $this geeft het object terug; niet de class.
Maar ik zie niet goed in in welke situatie je dit wil.

->toArray() geeft een array terug.
bv. $items = $object->toArray();

Wat wil je daar verder nog aan (chain)linken?
Zoals ik hierboven ook aal aangaf
<?php
$model = new Frontend_Model_Cursusitems();
$result = $model->getFirstItem($id)->toArray();
?>
Daar krijg ik een data uit mijn database in de vorm van een object.
Deze data wil ik kan om kunnen zetten naar een array doormiddel van er ->toArray(); achter te zetten.

Reageren