- var_dump: documentation ( source)
- sprintf: documentation ( source)
<?php
class A {
protected $c;
protected $d;
public function set(B $test) {
static $testMap = [];
if (empty($testMap)) {
$testMap = [
C::class => [$this, 'setC'],
D::class => [$this, 'setD'],
];
}
if ($test === null) {
return;
}
$testType = get_class($test);
if (!array_key_exists($testType, $testMap)) {
throw new InvalidArgumentException(
sprintf(
"Encountered unexpected body type (%s) that isn't supported",
$testType
)
);
}
call_user_func($testMap[$testType], $test);
}
/**
* @param C|null $c
*/
public function setC(C $c = null)
{
$this->c = $c;
}
/**
* @param D|null $d
*/
public function setD(D $d = null)
{
$this->d = $d;
}
}
abstract class B {
protected $data;
public function __construct($q = '')
{
$this->data = $q;
}
}
class C extends B {
}
class D extends B {}
$a1 = new A;
$a1->set(new C("test c1"));
var_dump($a1);
$a2 = new A;
$a2->set(new C("test c2"));
var_dump($a2);
$a3 = new A;
$a3->set(new C("test c3"));
var_dump($a3);