WTF?! - de opsomming

Dingen waar je dus even op moet letten, en die waarschijnlijk de eerste keren nog wel eens fout zullen gaan bij het gebruik van closures:

Variabelen importeren betekent kopiëren net zoals de argumenten die je aan een functie geeft. Wil je ze via een reference, dan moet je dat expliciet aangeven met een &-teken voor de variabelenaam.
Vergeet de punt-komma niet achter de afsluitende }. Direct aanroepen zoals in Javascript door er direct (args) achter te plaatsen kan niet.
Is je closure een property van een instantie? Dan kan je hem niet direct aanroepen omdat de Zend Engine dit zal zien als een method-aanroep. Een reference maken of __invoke aanroepen werkt wel
Wanneer je een closure binnen een object-context aanmaakt, wordt $this standaard voor je geïmporteerd. $this verwijst altijd naar de instantie waar de closure is aangemaakt.

En nog wat afsluitende Syntax-mogelijkheden:

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
<?php
function make_multiplier($factor) {
    return function($a) use ($factor) {
        return $a * $factor;
    };
}


/* Werkt wel: resultaat is 12 */
$times_four = make_multiplier(4);
echo $times_four(3);

/* Werkt niet: resultaat is syntax error */
make_multiplier(5)(5);
?>


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
23
24
25
26
27
28
<?php
class Number {
    
    protected $factor;
    
    public $multiplier;
    
    public function __construct($factor) {
        
        $this->factor = $factor;
        
        $this->multiplier = function($a) {
            return $a * $this->factor;
        };
    }
}


$foo = new Number(4);
/* Werkt wel: resultaat is 12 */
$foo_multiplier = $foo->multiplier;
echo $foo_multiplier(3);

/* Werkt ook: resultaat is 24 */
echo $foo->multiplier->__invoke(6);

/* Werkt niet: undefined method 'Foo::multiplier' */
$foo->multiplier(6);
?>

« Lees de omschrijving en reacties

Inhoudsopgave

  1. Je eerste closure
  2. Variabelen importeren in een closure
  3. De scope van 'use'
  4. Closure en objecten
  5. WTF?! - de opsomming
  6. Disclaimer

PHP tutorial opties

 
 

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.