Wat maakt een programmeertaal "reflective"?

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Ferdinandoh
  • Registratie: Januari 2012
  • Laatst online: 03-07 11:51
Ik moet voor een verslag de aard van PHP beschrijven. Nu heb ik de tip gekregen om eens naar deze tabel te kijken: Rosetta Code
Hier staat (onder andere) dat PHP "reflective" is.

Wikipedia vertelt het volgende :
In computer science, reflection is the ability of a computer program to examine (see type introspection) and modify its own structure and behavior (specifically the values, meta-data, properties and functions) at runtime.
Hier krijgt ik echter geen helder beeld van...
Kan iemand mij dit uitleggen?(Bij voorkeur aan de hand van voorbeelden)

Beste antwoord (via Ferdinandoh op 05-01-2016 15:15)


  • Barryvdh
  • Registratie: Juni 2003
  • Laatst online: 17:41
Dat doe je meestal ook niet zo inderdaad ;)

Maar het kan handig zijn om te bepalen wat voor methodes/properties ed. een object heeft (als je dit niet vooraf weet).

Bijv. de DI container in Laravel, die gebruikt Reflection om recursief te bekijken welke parameters de constructor van een gevraagde class heeft, om deze automatisch aan te vullen:
https://github.com/larave...tainer/Container.php#L727

Alle reacties


Acties:
  • +2 Henk 'm!

  • Afvalzak
  • Registratie: Oktober 2008
  • Laatst online: 31-08 12:02

Afvalzak

Zet jij mij even buiten?

Op de wiki (Wikipedia: Reflection (computer programming)) staan best een hoop voorbeelden van reflection:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// without reflection
$foo = new Foo();
$foo->hello();

// with reflection
$reflector = new ReflectionClass('Foo');
$foo = $reflector->newInstance();
$hello = $reflector->getMethod('hello');
$hello->invoke($foo);

// using callback
$foo = new Foo();
call_user_func(array($foo, 'hello'));

// using variable variables syntax
$className = 'Foo';
$foo = new $className();
$method = 'hello';
$foo->$method();

Last.fm | Code Talks


Acties:
  • 0 Henk 'm!

  • Ferdinandoh
  • Registratie: Januari 2012
  • Laatst online: 03-07 11:51
Maar wat is nu het voordeel van het aanroepen van object of functie op deze manier? Mij lijkt het alleen maar ingewikkelder.
Heb je op de manier niet extra veel regels code?
Wanneer zou je dit gebruiken?
Waar is het goed voor?

Het is mij gewoon niet duidelijk wat voor profijt je hier bij zou hebben en in wat voor situatie je dit nodig zou hebben. 8)7

Acties:
  • Beste antwoord
  • +3 Henk 'm!

  • Barryvdh
  • Registratie: Juni 2003
  • Laatst online: 17:41
Dat doe je meestal ook niet zo inderdaad ;)

Maar het kan handig zijn om te bepalen wat voor methodes/properties ed. een object heeft (als je dit niet vooraf weet).

Bijv. de DI container in Laravel, die gebruikt Reflection om recursief te bekijken welke parameters de constructor van een gevraagde class heeft, om deze automatisch aan te vullen:
https://github.com/larave...tainer/Container.php#L727

Acties:
  • +1 Henk 'm!

  • Antrax
  • Registratie: April 2012
  • Laatst online: 19:57
Het kan handig zijn om te bepalen welke methodes een object hebben. Ongetwijfeld gebruik je het al eens; Bekijk dit artikel eens voor meer informatie: http://code.tutsplus.com/...lection-in-php--net-31408

.Gertjan.: Ik ben een zelfstandige alcoholist, dus ik bepaal zelf wel wanneer ik aan het bier ga!


Acties:
  • +1 Henk 'm!

  • Xudonax
  • Registratie: November 2010
  • Laatst online: 07-10 13:38
In bijvoorbeeld .NET is dit ook heel handig als je plugins wilt maken. Je kunt met reflection kijken welke klassen in een assembly (.dll bestand / .so bestand) jouw interface of klasse implementeren, en vervolgens dat als pllugin inladen. Het is niet iets wat je dagelijks zult gebruiken, maar wel handig.

Een ander mooi voorbeeld is Django, een Python web framework. Hier worden via reflectie (Python noemt het introspection) alle models opgezocht, zodat deze in de database aangemaakt kunnen worden door de ORM. Ook word er op deze manier een volautomatische CRUD interface gemaakt om de objecten te beheren.

Acties:
  • +1 Henk 'm!

  • o_f_course
  • Registratie: Maart 2002
  • Laatst online: 16:14

o_f_course

Och...

Wij gebruiken reflection om te kijken welke properties een class heeft en konden daardoor een algemene serializer maken.

Ook een updater die methods selecteert (filtert) en in een bepaalde volgorde uitvoert, afhankelijk van de class die als library geladen wordt.

facts don't care about your feelings


Acties:
  • +1 Henk 'm!

  • Ferdinandoh
  • Registratie: Januari 2012
  • Laatst online: 03-07 11:51
Bedankt voor alle reacties, het is me een stuk duidelijker!
Pagina: 1