PHP 5.3.3 の場合
function foo() { return array(1,2,3); } $a = foo(); echo $a[1]; // 2
のように、一旦関数の戻り値を変数に格納してからアクセスしないといけなくて、
echo foo()[1]; // PHP Parse error: syntax error, unexpected '[', expecting ',' or ';' in php shell code on line 1
だと、エラーになってしまう。
メモ:PHP 5.4.0だと大丈夫らしい。
なんとか方法はないかと探していると……。
stdClass を利用してアクセスする方法があった
PHP-users - [PHP-users 35690] 関数の戻り値を変数に格納せずに配列アクセスしたいにて、
function foo(){ $ret = new stdClass; $ret->data = array(1,2); return $ret; } var_dump( foo()->data );PHP-users - [PHP-users 35690] 関数の戻り値を変数に格納せずに配列アクセスしたい
という書き方が可能なことを発見。
ということで、
// === Result Wrapper function &rw(&$r) { $obj = new stdClass; $obj->r = &$r; return $obj; }
という関数を用意しておけば、例えば、
例えばこういうことができたら楽だと思いませんか?
(そして php 5.4.0 ではそれができるので気に入りました)$path = '/abc/def/ghi.xyz';
PHP-users - [PHP-users 35690] 関数の戻り値を変数に格納せずに配列アクセスしたい
foo( pathinfo($path)['basename'] );
についても、
$path = '/abc/def/ghi.xyz'; var_dump( &rw(pathinfo($path))->r['basename'] ); // string(7) "ghi.xyz"
のように書ける。
小技として、覚えておく価値はありそう。