1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
|
<?php
require "tests.php";
// No new functions
check::functions(array());
check::classes(array('director_binary_string','Callback','Caller'));
// No new vars
check::globals(array());
class DirectorBinaryStringCallback extends Callback {
function run(string $dataBufferAA, string $dataBufferBB)
{
$ret = 0;
if ($dataBufferAA != null) {
for ($i = 0; $i < strlen($dataBufferAA); $i++)
$ret = $ret + ord($dataBufferAA[$i]) * 2;
}
if ($dataBufferBB != null) {
for ($i = 0; $i < strlen($dataBufferBB); $i++)
$ret = $ret + ord($dataBufferBB[$i]) * 3;
}
return $ret;
}
function writeData(string $dataBufferAA)
{
$ret = 0;
if ($dataBufferAA != null) {
for ($i = 0; $i < strlen($dataBufferAA); $i++)
$ret = $ret + ord($dataBufferAA[$i]) * 2;
}
return $ret;
}
}
$caller = new Caller();
$callback = new DirectorBinaryStringCallback();
$caller->setCallback($callback);
$sum = $caller->call();
$sumData = $caller->callWriteData();
$caller->delCallback();
check::equal($sum, 9*2*8 + 13*3*5, "Unexpected sum: $sum");
check::equal($sumData, 9*2*8, "Unexpected sumData: $sumData");
// FIXME Error: Cannot instantiate abstract class Callback
// It does make sense as writeData() is abstract
// (new Callback())->run("", "");
$callback = new DirectorBinaryStringCallback();
$caller->setCallback($callback);
$caller->call_null();
$caller->delCallback();
|