Slide 1

Slide 1 text

Obtaining Closure with Anonymous Functions @alc277

Slide 2

Slide 2 text

Functions&! Lambdas&! Anonymous&! Closures&! Fun.

Slide 3

Slide 3 text

Named Functions

Slide 4

Slide 4 text

Named Functions

Slide 5

Slide 5 text

Functions&! Lambdas&! Anonymous&! Closures&! Fun.

Slide 6

Slide 6 text

NAMED LAMBDA

Slide 7

Slide 7 text

Lambda Functions

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

Lambda Functions

Slide 10

Slide 10 text

Lambda Functions

Slide 11

Slide 11 text

Type Hinting

Slide 12

Slide 12 text

Wow much useful such amaze ! very programmer

Slide 13

Slide 13 text

Functions&! Lambdas&! Anonymous&! Closures&! Fun.

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

Anonymous Functions

Slide 16

Slide 16 text

Functions&! Lambdas&! Anonymous&! Closures&! Fun.

Slide 17

Slide 17 text

λ Closures Rasmus’s Throne Room

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

Lambda Variable Scope

Slide 20

Slide 20 text

Closure Variable Scope & “use”

Slide 21

Slide 21 text

Tricky Bit

Slide 22

Slide 22 text

Passing a Variable to a Lambda or Closure

Slide 23

Slide 23 text

No content

Slide 24

Slide 24 text

Passing a Variable by Reference to a Lambda or Closure

Slide 25

Slide 25 text

No content

Slide 26

Slide 26 text

No content

Slide 27

Slide 27 text

Closure Class

Slide 28

Slide 28 text

Closure! {! ! /* Methods */! ! public bindTo () { }! ! ! ! ! ! ! ! } PHP Closure Class ! ! ! ! public static bind () {}! ! ! ** double-secret function __invoke() { }! !

Slide 29

Slide 29 text

No content

Slide 30

Slide 30 text

Reasons to use Closures • Variable Scope and Binding! • Don’t Pollute Namespace With Functions! • Map/Reduce/Filter! • Data Output! • Retrieving Records from Database

Slide 31

Slide 31 text

• Currying! • Fixed-point Combinators (Y- Combinator)! • Improved Performance (Memoization)! • Monads! • Dependency Injection Reasons to use Closures

Slide 32

Slide 32 text

Things to Avoid • create_function! • Closure::bind()

Slide 33

Slide 33 text

Map/Reduce/Filter

Slide 34

Slide 34 text

Map/Reduce/Filter with Lambda Credit: Fabien Potencier

Slide 35

Slide 35 text

Map/Reduce/Filter Credit: Fabien Potencier Map/Reduce/Filter with Closure

Slide 36

Slide 36 text

Currying Photo: Penn State Office of Research Communications.

Slide 37

Slide 37 text

Currying

Slide 38

Slide 38 text

DATA OUTPUT

Slide 39

Slide 39 text

Data Output

Slide 40

Slide 40 text

Data Output

Slide 41

Slide 41 text

Database Records

Slide 42

Slide 42 text

Data Output

Slide 43

Slide 43 text

Y-Combinator

Slide 44

Slide 44 text

Y-Combinator

Slide 45

Slide 45 text

Y-Combinator

Slide 46

Slide 46 text

No content

Slide 47

Slide 47 text

Memoization

Slide 48

Slide 48 text

fib(5) = fib(3) + fib(4)! fib(3) = fib(1) + fib(2)! fib(1) = 1! fib(2) = fib(1) + fib(0)! fib(1) = 1! fib(0) = 0! fib(2) = 1 + 0 = 1! fib(3) = 1 + 1 = 2! fib(4) = fib(3) + fib(2)! fib(3) = fib(1) + fib(2)! fib(1) = 1! fib(2) = fib(1) + fib(0)! fib(1) = 1! fib(0) = 0! fib(2) = 1 + 0 = 1! fib(3) = 1 + 1 = 2! fib(2) = fib(1) + fib(0)! fib(1) = 1! fib(0) = 0! fib(2) = 1 + 0 = 1! fib(4) = 2 + 1 = 3! fib(5) = 3 + 2 = 5

Slide 49

Slide 49 text

Memoization

Slide 50

Slide 50 text

1 1 2 1 3 2 4 3 5 5 6 8 7 13 8 21 9 34 10 55 11 89 12 144 13 233 14 377 15 610 16 987

Slide 51

Slide 51 text

Memoization

Slide 52

Slide 52 text

No content

Slide 53

Slide 53 text

Monads

Slide 54

Slide 54 text

MonadPHP Anthony Ferrara

Slide 55

Slide 55 text

Monads Credit: Anthony Ferrara

Slide 56

Slide 56 text

Monads Credit: Anthony Ferrara

Slide 57

Slide 57 text

Monads Credit: Anthony Ferrara

Slide 58

Slide 58 text

$posts = [! [“title" => "foo", "author" => [“name" => "Bob", "email" => “[email protected]”]],! [“title" => "bar", "author" => array("name" => "Tom", "email" => “[email protected]”]],! [“title" => “baz"],! [“title" => "biz", "author" => array("name" => "Mark", "email" => “[email protected]”]],! ]; Monads Credit: Anthony Ferrara

Slide 59

Slide 59 text

Monads Credit: Anthony Ferrara

Slide 60

Slide 60 text

Dependency! Injection

Slide 61

Slide 61 text

Dependency Injection

Slide 62

Slide 62 text

Dependency Injection

Slide 63

Slide 63 text

Dependency Injection

Slide 64

Slide 64 text

Dependency Injection

Slide 65

Slide 65 text

Dependency Injection