- http://qiita.com/uzulla/items/dabe815ff9d793535d86 に触発された
- PHP7.0.3
こんなズンドコキヨシは嫌だ
-
__toString()
に実装されている - 変数、クラス名は全て日本語
-
ズン
,ドコ
,キ・ヨ・シ!
は定義せず変数名やクラス名から取得する - クロージャの即時呼び出しのジェネレータでループ
<?php
class ズンドコキ・ヨ・シ!
{
public function __toString()
{
$ズンズンズンズンドコ = null;
foreach ((function($ズンドコ) {
loop: yield $ズンドコ[mt_rand(0, 1)];
goto loop;
})(str_split(__CLASS__, 6)) as $どっちか) {
echo $どっちか, PHP_EOL;
$ズンズンズンズンドコ .= $どっちか;
if (strstr($ズンズンズンズンドコ, key(get_defined_vars()))) {
return mb_substr(__CLASS__, -6) . PHP_EOL;
}
}
}
}
echo new ズンドコキ・ヨ・シ!();
こんなズンドコキヨシは嫌だ
- バッファした標準出力を用いて比較
-
ズン
,ドコ
の出力がクラスの__get()
内 - クラス変数の名前とクラス名を用いて
ズン
,ドコ
を出力 -
goto
でループ処理 -
key(array_reverse(get_defined_vars()))
でズンズンズンズンドコ
を取得したいがために余計な変数を定義させずクロージャにした
<?php
class ズンドコキ・ヨ・シ!
{
private $_0_2;
private $_2_2;
public function __get($name)
{
list(, $offset, $limit) = explode('_', $name);
echo mb_substr(__CLASS__, $offset, $limit);
}
}
ob_start();
$ズンズンズンズンドコ = new ズンドコキ・ヨ・シ!();
start:
((function($zundoko) {
$zd = (new ReflectionClass(get_class($zundoko)))->getProperties()[mt_rand(0, 1)]->getName();
$zundoko->$zd;
})($ズンズンズンズンドコ));
if (strstr(ob_get_contents(), key(array_reverse(get_defined_vars())))) {
echo mb_substr(get_class($ズンズンズンズンドコ), -6), PHP_EOL;
ob_end_flush();
exit();
}
goto start;