- var_dump: documentation ( source)
<?php
class CanCastBool extends SimpleXMLElement
{
/** @var WeakMap 各 CanCastBool インスタンスのプロパティを保持する WeakMap */
public static WeakMap $properties;
/**
* XML を意識しないコンストラクタ
* @param string $fuga
* @return CanCastBool
*/
public static function makeInstance(string $fuga): CanCastBool
{
$instance = new self('<bool></bool>');
$instance->true = true;
self::$properties ??= new WeakMap();
// WeakMap に自分をキーにしてプロパティを記録させる
// WeakMap に退避させておくので XML とは別の扱いになる
self::$properties[$instance] = [
'fuga' => $fuga,
];
return $instance;
}
/** プロパティ的に読み取るメソッド。WeakMap から取ってくる */
public function getP(string $name)
{
return self::$properties[$this][$name];
}
/** プロパティ的にセットするメソッド。WeakMap にセットする */
public function setP($name, $value)
{
self::$properties[$this][$name] = $value;
}
public function toTrue(): void
{
$this->true = true;
}
public function toFalse(): void
{
unset($this->true);
}
}
$a = CanCastBool::makeInstance('fugafuga');
$b = CanCastBool::makeInstance('piyopiyo');
echo "---init----\n";
var_dump((bool)$a);// true
var_dump($a->getP('fuga'));// 'fugafuga'
$a->setP('fuga', 'foo');
$a->setP('hoge', 'bar');
echo "----------\n";
$a->toFalse();
var_dump((bool)$a);// false
var_dump($a->getP('fuga'));// 'foo'
var_dump($a->getP('hoge'));// 'bar'
$a->setP('hoge', 'hogehoge');
echo "----------\n";
$a->toTrue();
var_dump((bool)$a);// true
var_dump($a->getP('fuga'));// 'foo'
var_dump($a->getP('hoge'));// 'hogehoge'
var_dump($b->getP('fuga'));// 'piyopiyo'