[OOP] "fake" functie

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ozzie PHP

Ozzie PHP

08/04/2013 11:59:17
Quote Anchor link
Ola,

Ik kom soms met een class in de situatie dat ik een soort "fake" functie maak, een functie die eigenlijk alleen maar bedoeld is om uit te leggen wat er in de code gebeurt. Een voorbeeldje (versimpeld):

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
class Autoloader {

  public function register() {
    // registreer de autoload function    
  }

  public function autoload($class) {
    // autoload een class
  }

}

?>

Als ik nu de autoloader registreer dan doe ik zoiets als dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$autoloader
= new Autoloader();
$autoloader->register();
?>

Echter, ik zou de Autoloader class ook als volgt kunnen aanpassen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
class Autoloader {

  public function __construct() {
    // registreer de autoload function    
  }

  public function autoload($class) {
    // autoload een class
  }

}

?>

Als ik nu de autoloader wil registreren dan krijg je dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$autoloader
= new Autoloader();
?>

of nog korter...

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
new Autoloader();
?>

Nu vraag ik me af wat "beter" is. De allereerste manier van registeren, dus zo:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$autoloader
= new Autoloader();
$autoloader->register();
?>

of de laatste manier...

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
new Autoloader();
?>

Bij de eerste manier zie je duidelijker wat er gebeurt, maar de laatste manier is sneller omdat je geen extra functie hoeft aan te roepen.

Nu is dit een voorbeeld van een autoloader, maar het kan natuurlijk ook voor andere classes gelden. Stel we hebben een class "OrderVerwerker" die een order moet verwerken, doe je dan dit (de duidelijke manier):

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$id
= 20;
$order_verwerker = new OrderVerwerker($id);
$order_verwerker->verwerk();
?>

of doe je het zo...

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$id
= 20;
new
OrderVerwerker($id);
?>
 
PHP hulp

PHP hulp

23/04/2024 19:13:43
 
- Raoul -

- Raoul -

08/04/2013 12:41:53
Quote Anchor link
Het is heel simpel; wil je je class nog later gebruiken, declareer je een variable; zoniet, kan je hem ook gewoon instantiëren.
 
Ozzie PHP

Ozzie PHP

08/04/2013 12:57:55
Quote Anchor link
Ja, oké...

Dus in het voorbeeld van de autoloader zou jij dus dit doen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
new Autoloader();
?>

Maar nu zie je dus niet wat er gebeurt. Je ziet in de code alleen maar "new Autoloader();" staan, maar wat het doet, of wat het nut is wordt niet echt duidelijk... snap je wat ik bedoel?
 
Wouter J

Wouter J

08/04/2013 13:59:09
Quote Anchor link
Een constructor is ervoor bedoeld om een klasse gereed te maken voor gebruik. Niet om logica uit te gaan voeren, dat moet gedaan worden in de methoden.

Overigens zal ik in het geval van een Autoloader dit doen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
Autoloader::register();
?>
 
Ozzie PHP

Ozzie PHP

08/04/2013 14:05:36
Quote Anchor link
Waarom zou je er een statische class van maken? Ik dacht juist dat jij niet van de statische classes was?


Oké, maar stel nu... we nemen weer het voorbeeld van die OrderVerwerker class. Het enige wat die class doet en kan is een order verwerken. Is het dan "fout" om dat vanuit de constructor te regelen?

Ik snap ook wel wat jij bedoelt, maar ik vraag me af of het handig is om dit soort "fake" functies handmatig te triggeren, terwijl je dat ook vanuit de constructor kan doen. Het scheelt je een funtie-aanroep en is sneller.
 
Wouter J

Wouter J

08/04/2013 14:13:47
Quote Anchor link
Quote:
Waarom zou je er een statische class van maken? Ik dacht juist dat jij niet van de statische classes was?

Omdat de autoloader geen klasse is maar een functie.

Quote:
Is het dan "fout" om dat vanuit de constructor te regelen?

Wat is fout? Ik vind het fout, maar misschien een ander iemand niet. Je moet ook hier weer kijken wat jij OO vindt, vind jij dit oké en dan is het oké in jouw code, vind je het verkeerd dan is het verkeerd in jouw code.

Quote:
Het scheelt je een funtie-aanroep en is sneller.

Nogmaals, als dat jouw doel is in OO. Een snelle code ipv een erg strict OO code (waarbij over strict weer gediscussieerd kan worden), dan moet jij dat doen.
 
Ozzie PHP

Ozzie PHP

08/04/2013 14:15:58
Quote Anchor link
Okeej, thanks :)
Ik kan er trouwens geen statische class van maken, want ik geef paden mee in de constructor.
 



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.