3v4l.org

run code in 300+ PHP versions simultaneously
<?php class Str { /** PHPの組み込み関数の第一引数に使う値をプロパティとしてセット */ public function __construct( public string $str ){} /** * このクラスで外部に公開していない名前のメソッドが呼ばれた場合に動作するマジックメソッド * @see https://www.php.net/manual/ja/language.oop5.overloading.php#object.call */ public function __call($name, $arguments) { // 呼ばれたメソッド名の関数を第一引数を最初に与えたプロパティ、 // 第二引数以降を呼ばれた際の引数として実行 $result = $name($this->str, ...$arguments); // 関数の返り値が文字列ならば返り値を元に自身のインスタンスを生成して返却 // 関数の返り値が文字列でないならば返り値をそのまま返却 return is_string($result) ? new self($result) : $result; } /** __call に処理を渡さず、第二引数にプロパティの値を渡して explode 関数を実行するメソッドを用意する */ public function explode(string $separator, ?int $limit = PHP_INT_MAX) { return explode($separator, $this->str, $limit); } } $s = new Str('hoge'); $res = $s->substr(0, 2) ->strtoupper() ->str_pad(4, '0', STR_PAD_LEFT) ->explode('H'); var_dump($res); /* array(2) { [0]=> string(2) "00" [1]=> string(1) "O" } */
Output for git.master, git.master_jit, rfc.property-hooks
array(2) { [0]=> string(2) "00" [1]=> string(1) "O" }

This tab shows result from various feature-branches currently under review by the php developers. Contact me to have additional branches featured.

Active branches

Archived branches

Once feature-branches are merged or declined, they are no longer available. Their functionality (when merged) can be viewed from the main output page


preferences:
27.4 ms | 405 KiB | 5 Q