PHP Classes

Armory PHP Closure Trait: Cache, rename and hide anonymous functions

Recommend this page to a friend!
  Info   View files Example   View files View files (2)   DownloadInstall with Composer Download .zip   Reputation   Support forum   Blog (2)    
Ratings Unique User Downloads Download Rankings
Not yet rated by the usersTotal: 152 All time: 9,058 This week: 560Up
Version License PHP version Categories
armory 1.0.0Freeware7Language, Design Patterns, PHP 7, Traits
Description 

Author

This package provides a trait to cache, rename and hide your anonymous and callback functions in a class object instance.

It provides a protected array to store the functions under a different name.

By declaring the functions as properties of the class object, getter and setter methods take care of the hiding. The executing scope is preserved.

The trait can be used to gather all callback functions and store them in a protected variable to avoid name collisions.

It can also make class functions available without the necessity of retrieving the object instances first.

Innovation Award
PHP Programming Innovation award nominee
August 2020
Number 3
Some classes need to implement a callback system that allows applications to customize actions to be executed when certain events happen inside the class.

This package provides a trait that can be used to quickly add callback function registration and invocation for any number of types of events that a class may trigger.

Manuel Lemos
Picture of wim niemans
  Performance   Level  
Name: wim niemans <contact>
Classes: 6 packages by
Country: The Netherlands The Netherlands
Age: ???
All time rank: 345789 in The Netherlands The Netherlands
Week rank: 93 Up3 in The Netherlands The Netherlands Up
Innovation award
Innovation award
Nominee: 2x

Example

<?php

include_once 'armory.php';

Class
Proxy
{
use
armory;

public function
__construct() { $this->name = 'proxy'; }
public function
sayHello() { echo 'Hello from class ' . __CLASS__ . " named {$this->name} \n"; }
}
Class
A
{
public function
__construct() { $this->name = 'A'; }
public function
sayHello() { return function() { echo 'Hello from class ' . __CLASS__ . " named {$this->name} as ".get_called_class()." \n";}; }
}
Class
B
{
public function
__construct() { $this->name = 'B'; }
public function
sayHello() { return function() { echo 'Hello from class ' . __CLASS__ . " named {$this->name} as ".get_called_class()." \n";}; }
}

function
globalFunction($text) { echo "Hello from global scope $text \n"; }

$p = new Proxy;
$a = new A;
$b = new B;
$text = 'none';

$p->a1 = $a->sayHello();
$p->b1 = $b->sayHello();
$p->p1 = [$p, 'sayHello'];
$p->g1 = 'globalFunction';
$p->g2 = function() use ($text) { return globalFunction($text); };

print_r($p);
print_r($a);
print_r($b);

$p->a1();
$p->b1();
$p->p1();
$p->g1('G1');
$p->g2('G2');

$a->name = 'AA';
$b->name = 'BB';
$p->name = 'same';

$p->a1();
$p->b1();
$p->p1();

/* Outputs:
Proxy Object
(
    [armory:protected] => Array
        (
            [name] => proxy
            [a1] => Closure Object
                (
                    [this] => A Object
                        (
                            [name] => A
                        )

                )

            [b1] => Closure Object
                (
                    [this] => B Object
                        (
                            [name] => B
                        )

                )

            [p1] => Array
                (
                    [0] => Proxy Object
 *RECURSION*
                    [1] => sayHello
                )

            [g1] => globalFunction
            [g2] => Closure Object
                (
                    [static] => Array
                        (
                            [text] => none
                        )

                )

        )

)
A Object
(
    [name] => A
)
B Object
(
    [name] => B
)
Hello from class A named A as A
Hello from class B named B as B
Hello from class Proxy named proxy
Hello from global scope G1
Hello from global scope none
Hello from class A named AA as A
Hello from class B named BB as B
Hello from class Proxy named same
 */
 
?>


  Files folder image Files  
File Role Description
Plain text file armory.php Class Armory Trait
Accessible without login Plain text file demo.php Example Armory Demo

 Version Control Unique User Downloads Download Rankings  
 0%
Total:152
This week:0
All time:9,058
This week:560Up