やるしかないと思った。
<?php
/**
* すかさずPHPerオープンゲットでござるよ。
* PHPerマジックメソッドで抽象化した後力ずくでimplodeするでござる。
* いつだってPHPerの若い命は真っ赤に燃えているのでござるな。
*/
namespace 早乙女研究所\ゲッターロボ;
function 真 () {
return 真::class;
}
class 真 {
const チェンジ!! = '(チェンジ!!)';
protected $ケッターマシーン = null;
public function __construct ($getter) {
$this->ケッターマシーン = [
basename(str_replace("\\", '/', static::class)),
static::チェンジ!!,
$getter
];
}
public function オープンゲット! () {
return static::class;
}
public static function ゲッター () {
return new static(__FUNCTION__);
}
public function __call ($name, $args) {
$this->ケッターマシーン[3] = $name;
return $this;
}
public function __toString () {
return implode('', $this->ケッターマシーン);
}
}
echo 真()::ゲッター()->ロボ(), \PHP_EOL;
echo 真()::ゲッター()->ロボ()->オープンゲット!()::ゲッター()->ワン(), \PHP_EOL;
<?php
namespace 早乙女研究所\ゲッターロボ;
class 真 {
const チェンジ!! = '(チェンジ!!)';
protected $ケッターマシーン = null;
public function __construct ($getter) {
$this->ケッターマシーン = [
basename(str_replace("\\", '/', static::class)),
static::チェンジ!!,
$getter
];
}
public function オープンゲット! () {
return static::class;
}
public function __get ($name) {
$this->ケッターマシーン[3] = $name;
return $this;
}
public static function ゲッター () {
return new static(__FUNCTION__);
}
public function __toString () {
return implode('', $this->ケッターマシーン);
}
}
echo 真::ゲッター()->ロボ, \PHP_EOL;
echo 真::ゲッター()->ロボ->オープンゲット!()::ゲッター()->ツー, \PHP_EOL;