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.
Rick, als je iets van de database ophaalt gebruik je return $result;. Die $result is weer een ResultSet object, daarop kun je dus gewoon weer direct een method aanroepen. Dus:
<?php
$model = new Frontend_Model_Cursusitems();
$result = $model->getFirstItem($id)->toArray();

// is hetzelfde als
$result = $model->getFirstItem($id); // returns a ResultSet
$resultArray = $result->toArray();
?>
Maar waarom werkt de bovenste methode dan niet en de onderste wel? (Bij mij)
Want je krijg bij beide de zelfde resultset terug.
Dat lijkt op 1 van de nieuwe features van php 5.4

http://www.php.net/manual/en/migration54.new-features.php
- Function array dereferencing has been added, e.g. foo()[0].
- Class member access on instantiation has been added, e.g. (new Foo)->bar().

Die laten dus gemakkelijker dan vroeger toe dat je verder kan werken na het aanroepen van een methode; zonder dit eerst in een variabele te moeten stockeren.
Dus meer richting javascript, die daar nooit een probleem van gemaakt heeft.
Kris, nee dat heeft hier niks mee te maken. De eerste feature die je aangeeft is dat je dit kunt doen:
<?php
$foo = $model->getFirstItem($id)[0];

// waarbij je in <PHP5.4 dit gebruikte:
$foo = $model->getFirstItem($id);
$foo = $foo[0];
?>
En de tweede staat dit toe:
<?php
$foo = (new Foo())->getFirstItem($id);

// waarbij je in <PHP5.4 dit gebruikte:
$foo = new Foo();
$foo->getFirstItem($id);
Maar waarom werkt methode 1 dan niet bij mij en methode 2 wel?
Ah, ik had niet door gekregen dat het niet bij je werkte.

Even een klein testje, werkt dit wel:
<?php
class A
{
public function foo()
{
echo 'bar';
}
}
class B
{
public function bar()
{
return new Foo();
}
}

$b = new B();

$b->bar()->foo();
?>
Nee dit werkt niet bij mij. Ik krijg de volgende error:
Fatal error: Class 'Foo' not found in C:\wamp\www\eigenwerk\youtube\index.php on line 17
Ah, sorry. Regel 13 moet return new A() zijn ipv return new Foo()
Wouter dit werkt gewoon. Maar in de plaats van dat ik nu een functie aanroep roep je een heel object aan.
Dus waar nu staat
<?php return new Foo(); ?>
staat er
<?php return $result; ?>
en $result is dan gevuld met de data die ik uit de database haal.

[size=xsmall]Toevoeging op 07/02/2013 10:40:36:[/size]

Het is me nu gelukt. Als mensen willen weten hoe het gedaan word dan kan ik het hier wel even posten.

Reageren