<?php // interface.php require __DIR__ . "/../safeRun.php"; interface SomeInterface { } class SomeImplementation implements SomeInterface { } class NotSomeImplementation { } function returnsSomeInterface($someImplementation) : SomeInterface { return $someImplementation; } safeRun("Calling returnsSomeInterface() with a SomeImplementation object", function () { $someImplementation = new SomeImplementation(); returnsSomeInterface($someImplementation); }); safeRun("Calling returnsSomeInterface() with a NotSomeImplementation object", function () { $notSomeImplementation = new NotSomeImplementation(); returnsSomeInterface($notSomeImplementation); });
<?php // arrayArg.php require __DIR__ . "/../safeRun.php"; function countArray(array $array) { return count($array); } safeRun("Passing an array as an argument", function () { $rainbow = ["whero", "karaka", "kowhai", "kakariki", "kikorangi", "poropango", "papura"]; $result = countArray($rainbow); echo "The rainbow has {$result} colours<br>"; }); safeRun("Passing a string as an argument", function () { countArray("Not an array"); });
$result = takesInt($b); echo "Returned:<br>"; var_dump($result); }); safeRun("Passing a string", function () { $s = "1"; $result = takesInt($s); echo "Returned:<br>"; var_dump($result); }); safeRun("Passing a string which in no way can be considered an int", function () { $s = "not an integer"; $result = takesInt($s); echo "Returned:<br>"; var_dump($result); }); safeRun("Passing a PHP object", function () { $d = new DateTime(); $result = takesInt($d); echo "Returned:<br>"; var_dump($result); }); class C { } safeRun("Passing a bespoke object", function () { $o = new C(); $result = takesInt($o); echo "Returned:<br>"; var_dump($result); });
<?php // classWithToString.php require __DIR__ . "/safeRun.php"; class Person { protected $name; function __construct($name) { $this->name = $name; } } class StringablePerson extends Person { function __toString() { return $this->name; } } safeRun("Outputing a StringablePerson", function () { $son = new StringablePerson("Zachary"); echo "The boy's name is {$son}<br>"; }); safeRun("Outputing a Person (which gives a fatal error)", function () { $son = new Person("Zachary"); echo "The boy's name is {$son}<br>"; });
<?php // null.php require __DIR__ . "/../safeRun.php"; function returnsAnInt($i) : int { return $i; } safeRun("See what happens if we return null on an int function", function () { $result = returnsAnInt(null); echo "returnsAnInt(null): [{$result}]<br>"; });
<?php // class.php require __DIR__ . "/../safeRun.php"; class Test { } class NotTest { } function returnsTest($test) : Test { return $test; } safeRun("Calling returnsTest() with a Test object", function () { $test = new Test(); returnsTest($test); }); safeRun("Calling returnsTest() with a NotTest object", function () { $notTest = new NotTest(); returnsTest($notTest); }); safeRun("Calling returnsTest() with a null object", function () { returnsTest(null); });
<?php // subClass.php require __DIR__ . "/../safeRun.php"; class BaseClass { } class SubClass extends BaseClass { } class NotSubclass { } function returnsBaseClass($subClass) : BaseClass { return $subClass; } safeRun("Calling returnsBaseClass() with a SubClass object", function () { $subClass = new SubClass(); returnsBaseClass($subClass); }); safeRun("Calling returnsBaseClass() with a NotSubClass object", function () { $notSubClass = new NotSubClass(); returnsBaseClass($notSubClass); });
<?php // intReturnType.php require __DIR__ . "/../safeRun.php"; function echoInt($x) : int { return $x; } safeRun("Baseline: returning an int", function () { $testValue = 42; $result = echoInt($testValue); echo "echoInt({$testValue}): [{$result}]<br>"; }); safeRun("returning a string", function () { $testValue = "wha-tekau rua"; $result = echoInt($testValue); echo "echoInt({$testValue}): [{$result}]<br>"; });
<?php // intObject.php require __DIR__ . "/safeRun.php"; class int { } function takesInt(int $i) { return $i; } safeRun("Passing an int (object)", function () { $i = new int(); $result = takesInt($i); echo "Returned:<br>"; var_dump($result); });
} } class StringablePerson extends Person { function __toString() { return $this->name; } } function takesString(string $s) { return $s; } safeRun("Passing a string", function () { $s = "Zachary"; $result = takesString($s); echo "Returned:<br>"; var_dump($result); }); safeRun("Passing an object without __toString()", function () { $o = new Person("Zachary"); $result = takesString($o); echo "Returned:<br>"; var_dump($result); }); safeRun("Passing an object with __toString()", function () { $o = new StringablePerson("Zachary"); $result = takesString($o); echo "Returned:<br>"; var_dump($result); });