<?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";
}
?>
|