php/h02AssBT.php
<?php
require_once('env.php');
outBegin();
outH('assert');
out("ini_get: zend.assertions=" . ini_get('zend.assertions') . ", assert.exception=" . ini_get('assert.exception') . ' warning -1 means not compiled in!');
assertDemo();
ini_set('zend.assertions', 0);
ini_set('assert.exception', 0);
out("set zend.assertions=" . ini_get('zend.assertions') . ", assert.exception=" . ini_get('assert.exception'));
assertDemo();
ini_set('zend.assertions', 1);
ini_set('assert.exception', 0);
out("set zend.assertions=" . ini_get('zend.assertions') . ", assert.exception=" . ini_get('assert.exception'));
assertDemo();
ini_set('zend.assertions', 1);
ini_set('assert.exception', 1);
out("set zend.assertions=" . ini_get('zend.assertions') . ", assert.exception=" . ini_get('assert.exception'));
assertDemo();
out("old assert.callback =", ini_set('assert.callback', 'assCB'), ", new=assCB");
assertDemo();
trigger_error('call trigger_error', E_USER_NOTICE);
outH('definedVars');
testDefinedVars(2);
outH('backtrace');
phpDemoBacktrace(5);
outEnd(__file__);
function assCB() {
out("assCB", func_get_args());
return 'assCB return';
}
function testDefinedVars($i, $a=[]) {
$j = [$i, "i**2=" . ($i*$i)];
out('get_defined_vars', get_defined_vars());
if ($i > 0)
testDefinedVars($i-1, $j);
}
function assertDemo() {
$x1 = 7;
out('assertDemo 1: true, text');
assert($x1, 'var x1=7');
out('assertDemo 2: false, text');
try {
assert($x1 - $x1 , 'var x1 -x1');
} catch (Error $e) {
out('Caught exception: ', get_class($e), $e->getMessage());
}
out('assertDemo 3: false, notext');
try {
assert($x1 - $x1);
} catch (Error $e) {
out('Caught Error: ', get_class($e), $e->getMessage());
}
out('assertDemo 4: false, Error');
try {
assert($x1 - $x1, new Error('new error in assert'));
} catch (Error $e) {
out('Caught Error: ', get_class($e), $e->getMessage(), $e->getPrevious());
}
out('assertDemo 5: true, eval eAsrt');
eval(eAsrt('$x1 + $x2', "eval eAsrt x1=$x1"));
out('assertDemo 6: false, eval eAsrt');
eval(eAsrt('$x1 - $x2', "eval eAsrt x1=$x1"));
}
function eAsrt($c, $i) {
if (0)
return null;
elseif (1)
return "assert( $c, tAsrt('$i ==> $c'));";
else
return "{ try { \$q = $c; \$r=''; } catch (Throwable \$t) {\$q=0; \$r= ((string) \$t) . ' ??? ';} assert( \$q, '$i ==> \$t$c'); }";
}
function tAsrt($t) {
echo "tAsrt $t\n";
return "tAsrt $t";
}
function phpDemoBacktrace($l) {
if ($l > 0)
phpDemoBacktrace($l-1);
else {
outUL();
outWEC('debug_print_backtrace; before ob_start DEBUG_BACKTRACE_IGNORE_ARGS', DEBUG_BACKTRACE_IGNORE_ARGS );
ob_start();
debug_print_backtrace(0, 0);
for ($tr = ob_get_contents(); substr($tr, strlen($tr)-strlen(PHP_EOL)) == PHP_EOL;
$tr = substr($tr, 0, strlen($tr)-strlen(PHP_EOL))) {}
ob_end_clean();
outLi("backtrace Formatted after ob_end at", __file__, __line__);
outOL();
foreach(explode("\n", $tr) as $l)
outLi($l);
outOLEnd();
outLi("end debug_print_backtrace");
outLi('mit debug_backtrace @', __line__, __file__);
outOL();
foreach(debug_backtrace() as $l)
outLi($l);
outOLEnd();
outLi('end debug_backtrace');
outLi('mit function backtrace@', __line__, __file__);
backtrace();
outLi('mit trigger_error');
trigger_error("trigger error to get backtrace");
outULEnd('after function backtrace');
}
}
function backtrace($num=7) { // returns backtrace, html formatted
ob_start();
debug_print_backtrace(0 , $num);
for ($tr = ob_get_contents(); substr($tr, strlen($tr)-strlen(PHP_EOL)) == PHP_EOL;
$tr = substr($tr, 0, strlen($tr)-strlen(PHP_EOL))) {}
ob_end_clean();
outUL();
foreach(explode("\n", $tr) as $l)
outLi($l);
outULEnd();
}
?>