2. Overview
Objective
Learn how to use the closures/anonymous functions with the
design patterns
Requirements
Knowledge of the adapter design pattern
Knowledge of the observer design pattern
Knowledge of the intercepting filter design pattern
Estimated Time
12 minutes
www.prodigyview.com
3. Follow Along With A Code
Example
1. Download a copy of the example code at
www.prodigyview.com/source.
2. Install the system in an environment you feel
comfortable testing in.
3. Proceed to examples/data/ClosureDesigns.php
4. Why Closures
In our previous examples, we implemented the
intercepting filters, observers and adapter design patterns
by calling other classes.
That can be overkill
To make things a little faster and easier to write, we can
implement these same design patterns by having them
call anonymous functions.
5. Our Class
We are starting this example by creating a class with the 3
design patterns implemented.
Extend PVStaticObject Implemented the adapter design pattern
Implement Filters Implement Observer
6. Results
We have the design patterns implemented, so lets run the
method once and see what result we get without using
any of the patterns.
Very plain and basic, none of the filters or observers had
any affect. Time to make this method a little bit sexier.
7. Arguments Filter
Now let’s add a filter to the arguments that are initially coming
in. Filters with closures are just like regular filters except we
have to add the option ‘type’ as a closure.
Define the closure Set the class to filter Set the method to filter
Add the closure Set the type to ‘closure’ Executes on this event
8. Arguments Filter Part 2
Next we are going to take adding the anonymous function to
the next level. Before we defined the function in a variable and
passed it the method. Lets start adding the function directly into
the method.
Class to Add Filter Method to add filter to Give the filter a name
Create the anonymous function by
The type as ‘closure’ Add an event passing it as the parameter
9. Add the Observer
Similar to how we added the anonymous function in the
filter, we are going to add the anonymous function to the
observer.
Set the name of the event Make up a name for the anonymous function
Set the options type to closure Create the anonymous function
10. Results
Before we add the adapter design pattern, we are going
to test the output when we run the method with the filters
and observers.
We a little magic, we’ve made our output a little bit livelier.
11. Adapter and Closure
For our final design pattern, we are going to completely
override the method by using an adapter and a closure.
The class to add the adapter too The method to assign the adapter too
The anonymous function in place of the parameter
Set the option ‘type’ to ‘closure’
12. Results
Remember from our other examples, adding the adapter
will completely override the method. This means the
execution of the code will never reach other design
patterns. The result of adding the adapter will give us this:
13. Challenge!
This is an optional challenge designed to give you a better
understanding of the design patterns.
1. Look into the source code of the file PVFileManager in the
core/util/PVFileManager.php.
2. Find the method for writing a file. Notice how it contains the ability
to use adapters, filters and observers.
3. First apply filters and observers using anonymous functions to the
method.
4. Then apply an adapter using an anonymous function and write the
file out yourself.
14. API Reference
For a better understanding of the Design Patterns, check
out the api at the two links below.
PVStaticPatterns
PVPatterns
More Tutorials
For more tutorials, please visit:
http://www.prodigyview.com/tutorials
www.prodigyview.com