<?php 
//test of dynclass vs stdClass 
include "dynClass.class.php"; 
echo '<h1>Initialising classes</h1>'; 
$dyn = new dynClass(array("z"=>"foo", "method1"=>function(){ return "Method1 called";}));  
$std = new stdClass(array("z"=>"foo")); 
 
echo '<p>dynClass understands initialization from array</p>'; 
echo "dyn ->z : " . $dyn->z; 
echo '<p>But stdClass does not</p>'; 
echo "std ->z : " . $std->z; 
 
$dyn->a = array(1,2,3,4,"ttt"); 
$std->a = array(1,2,3,4,"ttt"); 
 
$dyn->b = true; 
$std->b = true; 
 
$dyn->c = "string"; 
$std->c = "string"; 
 
$testclass = new stdClass(); 
$testclass->property = "test property"; 
 
$dyn->o = $testclass; 
$std->o = $testclass; 
 
$dyn->f = function($parm='no value passed') { return "lambda passed $parm"; } ; 
$std->f = function($parm='no value passed') { return "lambda passed $parm"; } ; 
 
$u = function($parm='no value passed') { return "Saved lambda returned $parm"; } ; 
$dyn->u = $u; 
$std->u = $u; 
 
$t = function($parm='z') { 
    return $this->$parm; 
    } ; 
$dyn->t = $t; 
 
global $glob; 
$glob = "This is a global"; 
$g = function () {  
    global $glob;  
    return "This is from outside: $glob"; 
     } ; 
 
$dyn->g = $g; 
$std->g = $g; 
 
$dyn->i = 55; 
$std->i = 55; 
 
$dyn->e = 55E6; 
$std->e = 55E6; 
 
echo "<h1>Var_dump of stdClass</h1><pre>"; 
var_dump($std); 
 
echo "</pre>var_dump of dynClass</h1><pre>"; 
var_dump($dyn); 
 
echo " 
</pre><h1>Test lambdas added to dynClass as properties</h1><pre> 
directly   assigned lambda f : {$dyn->f} 
indirectly assigned lambda u : {$dyn->u} 
lambda referencing global  g : {$dyn->g} 
lambda referencing \$this   t : {$dyn->t} 
lambda at instantiation  method1: {$dyn->method1} 
</pre>"; 
 
echo " 
</pre><h1>Test lambdas added to dynClass as methods</h1><pre> 
directly   assigned lambda f : {$dyn->f("-value-")} 
indirectly assigned lambda u : {$dyn->u("-value-")} 
lambda referencing global  g : {$dyn->g("-value-")} 
lambda referencing \$this   t : {$dyn->t("z")} 
</pre><h1>The remainder are going to fail</h1>"; 
try { 
    echo "</pre><h1>Test lambdas added to stdClass as properties</h1><pre> 
    f : {$std->f} 
    u : {$std->u} 
    g : {$std->g} 
    </pre>"; 
 
    echo " 
    </pre><h1>Test lambdas added to stdClass as methods</h1><pre> 
    f : {$std->f("-value-")} 
    u : {$std->u("-value-")} 
    g : {$std->g("-value-")} 
    </pre>"; 
} 
catch (Exception $e) { 
    echo "<br>As anticipated, this error occurred: $e"; 
} 
?> 
 
 |