vanuit een static function, een private functie aanroepen
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
public static function searchProduct( $aFormValues )
{
// query,
// verzamelen van de resultaten
// doorgeven van de resultaten aan een nieuwe functie
self::viewFoundProducts( $aRows );
}
private function viewFoundProducts( $aProducts )
{
$this->oTemplate->addBlockFromFile( "content_holder", "templates/blocks/" . __FUNCTION__ . ".html" );
foreach( $aProducts as $sKey => $sValue )
{
}
}
?>
public static function searchProduct( $aFormValues )
{
// query,
// verzamelen van de resultaten
// doorgeven van de resultaten aan een nieuwe functie
self::viewFoundProducts( $aRows );
}
private function viewFoundProducts( $aProducts )
{
$this->oTemplate->addBlockFromFile( "content_holder", "templates/blocks/" . __FUNCTION__ . ".html" );
foreach( $aProducts as $sKey => $sValue )
{
}
}
?>
Fatal error: Using $this when not in object context in L:\includes\voornicks2\class\product.class.php on line 62 welke is: $this->oTemplate->addBlockFromFile( "content_holder", "templates/blocks/" . __FUNCTION__ . ".html" );
Komt dit omdat ik de functie aanroep vanuit de static functie?
Een static methode is niets anders dan een functie die ingedeeld is in een klasse.
Bij het aanroepen van een static methode ben je $this kwijt en kun je dus ook geen niet static methoden meer aanroepen in de klasse.
Je roept viewFoundProducts aan als static methode aan terwijl deze dat niet is?
Erik Rijk op 07/11/2010 18:41:39:
Komt dit omdat ik de functie aanroep vanuit de static functie?
Ja, dat klopt. De viewFoundProducts mag dan wel niet static zijn, maar omdat je hem static oproept wordt hij alsnog in de statische context van de applicatie gegooid.
Gewijzigd op 07/11/2010 19:19:23 door Joost B
Martijn B op 07/11/2010 19:16:53:
Je roept viewFoundProducts aan als static methode aan terwijl deze dat niet is?
Er is geen andere manier om die functie aan te roepen toch? dit doe ik dan toch goed?
@ Joost,
Oke duidelijk.
Heb je hier een oplossing voor?
Hoe roep je searchProduct nu aan? Weet jij zelf waar $this naar zou moeten verwijzen op dat moment? Zo ja, dan kan je hem waarschijnlijk ook anders aanroepen. Zo nee, dan is het logisch niet mogelijk :)
Erik Rijk op 07/11/2010 20:12:23:
@ Joost,
Oke duidelijk.
Heb je hier een oplossing voor?
Oke duidelijk.
Heb je hier een oplossing voor?
Er zijn een heleboel 'alternatieve' oplossingen te bedenken die dit alsnog mogelijk zouden kunnen maken, maar dat levert uiteindelijk te veel spaghetti code op en daar wordt natuurlijk niemand vrolijk van.
Misschien is het interessant om te kijken wat de reden is waarom er je hebt gekozen voor een statische functie? Het kan zijn dat je bijv. de searchProduct functie op meerdere plekken wilt gebruiken aangezien je ook meerdere zoekvensters in je applicatie hebt zitten op verschillende plekken. Hoe heet overigens de klasse waarin je deze twee functies hebt zitten?
Gewijzigd op 08/11/2010 03:50:39 door Joost B
Je kan wel statische functies aanroepen in een andere statische functie door self::functie() te doen.
Je kan natuurlijk de instance opslaan in een statisch veld, maar dan probeer je een fout in je model te verbergen.
Bedankt voor de hulp!