BeginnerEngineerBlog
中の人
中の人

【php get_defined_vars】引数をkey付きで全て取得したい

公開: 2023-10-09 12:52
更新: 2023-10-09 12:55
26
php get_defined_vars
関数の引数を引数名付きで全て取得したいときのやり方です

こんにちは!

中の人です!

関数の引数を名前付きで取得したいときに便利な関数があったので紹介します。

get_defined_vars



この関数は、環境変数、サーバー変数、get_defined_vars() がコールされたスコープ内でユーザーが定義した変数を含む、全ての の定義済の変数のリストを有する多次元の配列を返します。

こちらの関数を使うといい感じに取得できます。

sample1


<?php

function hoge($hoge, $huga)
{
    $args = get_defined_vars();
    foreach ($args as $key => $arg) {
        echo "keyは: " . $key;
        echo "\n";
        echo "argは: " . $arg;
        echo "\n";
    }
}

hoge('beginner', 'engineer');

この実行結果は


keyは: hoge

のhogeは

function hoge($hoge, $huga)

の$hogeになります

sample2


<?php

function hoge($hoge, $huga)
{
    $piyo = $hoge . $huga; // 👈 引数取得前に変数を定義
    $args = get_defined_vars();
    foreach ($args as $key => $arg) {
        echo "keyは: " . $key;
        echo "\n";
        echo "argは: " . $arg;
        echo "\n";
    }
}

hoge('beginner', 'engineer');

この実行結果は


引数の後にpiyoが追加されました

sample3


<?php

$args = get_defined_vars();
foreach ($args as $key => $arg) {
    echo "keyは: " . $key;
    echo "\n";
    echo "argは: " . $arg;
    echo "\n";
}

この実行結果は


phpのスーパーグローバルが取得できました。

関数内で

get_defined_vars

を使用しても、スーパーグローバルは無視されるようですね

sample4


<?php

class Hoge
{
    public $hello = 'hello!';

    protected $hey = 'hey!';

    private $osu = 'osu!';

    public const OSUOSU = 'osuosu!';

    protected const SUSHI = 'sushi!';

    private const TUNA = 'tuna!';

    public function __construct()
    {
        
    }

    public function hoge($hoge, $huga)
    {
        $args = get_defined_vars();
        foreach ($args as $key => $arg) {
            echo "keyは: " . $key;
            echo "\n";
            echo "argは: " . $arg;
            echo "\n";
        }
    }
}


$hoge = new Hoge();

$hoge->hoge('beginner', 'engineer');

この実行結果は


こうなります。

クラス内でも、関数の場合は関数の中のスコープということですね。


ちなみに


似たような関数で


と言う関数があります。

当初、引数まとめて取得したいとネットを漁っていたのですが、ほとんどこの関数がヒットしました。

sample


<?php

function hoge($hoge, $huga)
{
    $piyo = $hoge . $huga;
    $args = func_get_args();
    foreach ($args as $key => $arg) {
        echo "keyは: " . $key;
        echo "\n";
        echo "argは: " . $arg;
        echo "\n";
    }
}

hoge('beginner', 'engineer');

この結果は


$piyoは無視され、単純に引数のみ取得されます。

が、変数名はありません。indexが付与されて取得されます。

確かに引数のみ取得する場合は、こちらの方が信頼できそうですが、これだとどうしても変数名は取得できないみたいです。


終わりに


多分関数の一番最初に

get_defined_vars

を呼び出せば、変な変数が入ることはないと思う!

ということで、引数に名前付きで取得したいときは参考にしてください。

また、他にももっといい方法あるよって方はコメントいただけると嬉しいです。

ということで

お疲れ様でした。
0
0
0
0
通信エラーが発生しました。
似たような記事