vanuit een static function, een private functie aanroepen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Erik Rijk

Erik Rijk

07/11/2010 18:41:39
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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 )
    {
        
    }
}


?>


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?
 
PHP hulp

PHP hulp

20/04/2024 02:19:30
 
Martijn B

Martijn B

07/11/2010 19:16:53
Quote Anchor link
Een static methode is niet gekoppeld aan het object ($this) wel aan de klasse.

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?
 
Joost B

Joost B

07/11/2010 19:17:33
Quote Anchor link
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
 
Erik Rijk

Erik Rijk

07/11/2010 20:12:23
Quote Anchor link
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?
 
Pim -

Pim -

07/11/2010 20:28:38
Quote Anchor link
searchProduct() hoort de zoekresultaten terug te geven, niet weer te geven.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$results
= Product::searchProduct($query);

$product->viewProducts($results);
?>
 
Jelmer -

Jelmer -

07/11/2010 20:31:03
Quote Anchor link
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 :)
 
Joost B

Joost B

08/11/2010 03:49:38
Quote Anchor link
Erik Rijk op 07/11/2010 20:12:23:
@ Joost,

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
 
Jurgen Meijer

Jurgen Meijer

08/11/2010 15:34:31
Quote Anchor link
Je kan wel statische functies aanroepen in een andere statische functie door self::functie() te doen.
 
Pim -

Pim -

08/11/2010 16:34:22
Quote Anchor link
Je kan natuurlijk de instance opslaan in een statisch veld, maar dan probeer je een fout in je model te verbergen.
 
Erik Rijk

Erik Rijk

08/11/2010 17:40:56
Quote Anchor link
Ik heb jullie advies goed doorgelezen en op mijn werk nog wat research gedaan. Ik begrijp nu ook beter wanneer je static zou moeten gebruiken / wanneer het handig is.

Bedankt voor de hulp!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.