BeginnerEngineerBlog
中の人
中の人

【php __getマジックメソッド】アロー演算子でプロパティや関数以外の値を取得したい

公開: 2022-12-31 23:50
更新: 2023-04-05 23:08
422
php __get マジックメソッド アロー演算子
配列の指定が面倒になったのでアロー演算子で値取得できれば便利だなーと感じて調べたら簡単にできたので紹介します

こんにちは!

中の人です

もうすぐ2022年が終わりますねー!
みなさんいいことありましたか?
ちなみに私は30半ばにして生まれて初めて流れ星を見ることができました!
2023年お互い頑張っていきましょう!

ということで超基本的な内容かと思いますがアロー演算子でクラスのプロパティや関数以外の値を取得するやり方を紹介します

変更履歴
20230107
不要なクラスの記述を削除しました。

アロー演算子とは


一旦アロー演算子とは何かなんですが

例えば

<?php

class OsuService
{
    public $osu = 'osu';

    public function echoOsuOsu()
    {
        return 'OsuOsu';
    }
}

$osuService = new OsuService();

//              👇こいつ
echo $osuService->osu;
echo "\n";
//              👇こいつ
echo $osuService->echoOsuOsu();
echo "\n";
//                  👇こいつ
var_dump($osuService->osuosu);

こんな処理をすると

osu
OsuOsu
NULL

こんなのが返ります

ということでアロー演算子はclassのプロパティや関数を呼び出す際に"->"が使われます


本題


で、csvのアップロード処理とかやると配列に値が格納されて、特定の値を指定して取得する際

$a = $array['key'];

こんな感じで取得すると思いますが、

少し面倒くさくないですか?

と個人的に思うわけです

要するに

$a = $array->key;

これで取得できたら、めっちゃ小さいことなんですが、楽な気がしませんか?私は楽な気がします。
(エディタで補完される場合が大半ですが)

ということでこの痒いところに手が届くphpのマジックメソッドを紹介します


__get関数


__get関数はマジックメソッドと呼ばれてるもので、マジックメソッドはリンク先にもあるように結構あります。
一番メジャーなのは__construct関数かと思います。

で、この関数はアロー演算子で値を取得するときに発動されます。

ということで利用する例を紹介します


使用例


📁 test.php

<?php

ini_set('error_reporting', E_ALL);

class OsuService
{
    private $array = [];

    public $osu = 'osu';

    private $privateOsu = 'privateOsu!';

    protected $protectedOsu = 'protectedOsu!';

    public function echoOsuOsu()
    {
        return 'OsuOsu';
    }

    public function setArray(array $array)
    {
        $this->array = $array;
    }

                    // 👇 こいつがマジックメソッド
    public function __get($name)
    {
        return $this->array[$name] ?? null;
    }
}

$osuService = new OsuService();

$array = [
    'title' => 'beginner_engineer_blog',
    'name' => '中の人',
    'kana' => 'ナカノヒト',
];

$osuService->setArray($array);

var_dump($osuService->title);
var_dump($osuService->name);
var_dump($osuService->kana);
var_dump($osuService->osu);
var_dump($osuService->osuosu);
var_dump($osuService->echoOsuOsu());
var_dump($osuService->echoOsuOsu);
var_dump($osuService->array);
var_dump($osuService->privateOsu);
var_dump($osuService->protectedOsu);

$osuService->setArray(
    [
        'osu' => 'osu!',
        'privateOsu' => 'privateOsuOsu',
        'protectedOsu' => 'protectedOsuOsu',
    ]
);

var_dump($osuService->osu);
var_dump($osuService->privateOsu);
var_dump($osuService->protectedOsu);

これを実行すると

string(22) "beginner_engineer_blog"
string(9) "中の人"
string(15) "ナカノヒト"
string(3) "osu"
NULL
string(6) "OsuOsu"
NULL
NULL
NULL
NULL
string(3) "osu"
string(13) "privateOsuOsu"
string(15) "protectedOsuOsu"

こんなのが返ります

配列で渡した内容のkeyを指定すればその値が返りますが、publicは優先して呼ばれるみたいです
で、private等アクセス不可能なプロパティは無視されてるみたいですね

へー(゚∀゚ )


終わりに


これだけの内容ですが、csvのアップロード処理なんかフィールドの数が50個とか100個以上の場合があるので、ちょっとしたフラストレーションがかなりのフラストレーションになる場合があるので、自分のやりやすい書き方に変換する術を考えるのは大事かと思います。

ということでなんかのひとつの選択肢として覚えといて損はないかと思います!既に知ってる方は参考にしてください!

よいお年を!🎍
0
0
0
0
通信エラーが発生しました。
【広告】
似たような記事