stdClassのオブジェクトを作る方法

1. データベースから取ってくるデータがstdClassの配列だったりします。
2. そのstdClassの配列を処理するコードを作ったりします。
3. コードを作るとPHPUnitでテストしたりします。
4. そうすると期待値や引数がstdClassだったりします。
5. するとstdClassのオブジェクトを作らねばなりません。

- 環境
    - macOS Mojave バージョン10.14.3
    - PHP 7.3.1
    - Laravel Framework 5.7.26

# 方法1. 配列をオブジェクトでキャストする
```php:controlStdClassArray->createStdClassArrayCast
public function createStdClassArrayCast(): array
{
    $stdArray = [
        (object)['name' => 'イタリアンパセリ', 'otherName' => 'パースレー', 'gakumei' => 'Petroselinum neapolitanum', 'bunrui' => 'セリ科オランダゼリ属'],
        (object)['name' => 'グラジオラス', 'otherName' => '唐菖蒲', 'gakumei' => 'Gladiolus', 'bunrui' => 'アヤメ科グラジオラス属'],
        (object)['name' => 'アボカド', 'otherName' => 'ワニナシ', 'gakumei' => 'Persea americana', 'bunrui' => 'クスノキ科ワニナシ属'],
        (object)['name' => 'マロウ', 'otherName' => 'ウスベニアオイ', 'gakumei' => 'Malva sylvestris', 'bunrui' => 'アオイ科ゼニアオイ属'],
    ];
    return $stdArray;
}
```
```bash
$ php controlStdClassArray.php 
array(4) {
  [0]=>
  object(stdClass)#2 (4) {
    ["name"]=>
    string(24) "イタリアンパセリ"
    ["otherName"]=>
    string(15) "パースレー"
    ["gakumei"]=>
    string(25) "Petroselinum neapolitanum"
    ["bunrui"]=>
    string(30) "セリ科オランダゼリ属"
  }
  [1]=>
  object(stdClass)#3 (4) {
    ["name"]=>
    string(18) "グラジオラス"
    ["otherName"]=>
    string(9) "唐菖蒲"
    ["gakumei"]=>
    string(9) "Gladiolus"
    ["bunrui"]=>
    string(33) "アヤメ科グラジオラス属"
  }
  [2]=>
  object(stdClass)#4 (4) {
    ["name"]=>
    string(12) "アボカド"
    ["otherName"]=>
    string(12) "ワニナシ"
    ["gakumei"]=>
    string(16) "Persea americana"
    ["bunrui"]=>
    string(30) "クスノキ科ワニナシ属"
  }
  [3]=>
  object(stdClass)#5 (4) {
    ["name"]=>
    string(9) "マロウ"
    ["otherName"]=>
    string(21) "ウスベニアオイ"
    ["gakumei"]=>
    string(16) "Malva sylvestris"
    ["bunrui"]=>
    string(30) "アオイ科ゼニアオイ属"
  }
}
```

# 方法2. `new \stdClass`をして1つ1つ設定する
```php:controlStdClassArray->createStdClassArrayNew
public function createStdClassArrayNew()
{
    $stdArray = [];

    $stdObj = new \stdClass();
    $stdObj->name = 'イタリアンパセリ';
    $stdObj->otherName = 'パースレー';
    $stdObj->gakumei = 'Petroselinum neapolitanum';
    $stdObj->bunrui = 'セリ科オランダゼリ属';
    $stdArray[] = $stdObj;

    $stdObj = new \stdClass();
    $stdObj->name = 'グラジオラス';
    $stdObj->otherName = '唐菖蒲';
    $stdObj->gakumei = 'Gladiolus';
    $stdObj->bunrui = 'アヤメ科グラジオラス属';
    $stdArray[] = $stdObj;

    $stdObj = new \stdClass();
    $stdObj->name = 'アボカド';
    $stdObj->otherName = 'ワニナシ';
    $stdObj->gakumei = 'Persea americana';
    $stdObj->bunrui = 'クスノキ科ワニナシ属';
    $stdArray[] = $stdObj;

    $stdObj = new \stdClass();
    $stdObj->name = 'マロウ';
    $stdObj->otherName = 'ウスベニアオイ';
    $stdObj->gakumei = 'Malva sylvestris';
    $stdObj->bunrui = 'アオイ科ゼニアオイ属';
    $stdArray[] = $stdObj;

    return $stdArray;
}
```
```bash
$ php controlStdClassArray.php
array(4) {
  [0]=>
  object(stdClass)#2 (4) {
    ["name"]=>
    string(24) "イタリアンパセリ"
    ["otherName"]=>
    string(15) "パースレー"
    ["gakumei"]=>
    string(25) "Petroselinum neapolitanum"
    ["bunrui"]=>
    string(30) "セリ科オランダゼリ属"
  }
  [1]=>
  object(stdClass)#3 (4) {
    ["name"]=>
    string(18) "グラジオラス"
    ["otherName"]=>
    string(9) "唐菖蒲"
    ["gakumei"]=>
    string(9) "Gladiolus"
    ["bunrui"]=>
    string(33) "アヤメ科グラジオラス属"
  }
  [2]=>
  object(stdClass)#4 (4) {
    ["name"]=>
    string(12) "アボカド"
    ["otherName"]=>
    string(12) "ワニナシ"
    ["gakumei"]=>
    string(16) "Persea americana"
    ["bunrui"]=>
    string(30) "クスノキ科ワニナシ属"
  }
  [3]=>
  object(stdClass)#5 (4) {
    ["name"]=>
    string(9) "マロウ"
    ["otherName"]=>
    string(21) "ウスベニアオイ"
    ["gakumei"]=>
    string(16) "Malva sylvestris"
    ["bunrui"]=>
    string(30) "アオイ科ゼニアオイ属"
  }
}
```

# 全貌
```php:controlStdClassArray.php
<?php
namespace App;


class controlStdClassArray
{
    public function createStdClassArrayCast(): array
    {
        $stdArray = [
            (object)['name' => 'イタリアンパセリ', 'otherName' => 'パースレー', 'gakumei' => 'Petroselinum neapolitanum', 'bunrui' => 'セリ科オランダゼリ属'],
            (object)['name' => 'グラジオラス', 'otherName' => '唐菖蒲', 'gakumei' => 'Gladiolus', 'bunrui' => 'アヤメ科グラジオラス属'],
            (object)['name' => 'アボカド', 'otherName' => 'ワニナシ', 'gakumei' => 'Persea americana', 'bunrui' => 'クスノキ科ワニナシ属'],
            (object)['name' => 'マロウ', 'otherName' => 'ウスベニアオイ', 'gakumei' => 'Malva sylvestris', 'bunrui' => 'アオイ科ゼニアオイ属'],
        ];
        return $stdArray;
    }

    public function createStdClassArrayNew()
    {
        $stdArray = [];

        $stdObj = new \stdClass();
        $stdObj->name = 'イタリアンパセリ';
        $stdObj->otherName = 'パースレー';
        $stdObj->gakumei = 'Petroselinum neapolitanum';
        $stdObj->bunrui = 'セリ科オランダゼリ属';
        $stdArray[] = $stdObj;

        $stdObj = new \stdClass();
        $stdObj->name = 'グラジオラス';
        $stdObj->otherName = '唐菖蒲';
        $stdObj->gakumei = 'Gladiolus';
        $stdObj->bunrui = 'アヤメ科グラジオラス属';
        $stdArray[] = $stdObj;

        $stdObj = new \stdClass();
        $stdObj->name = 'アボカド';
        $stdObj->otherName = 'ワニナシ';
        $stdObj->gakumei = 'Persea americana';
        $stdObj->bunrui = 'クスノキ科ワニナシ属';
        $stdArray[] = $stdObj;

        $stdObj = new \stdClass();
        $stdObj->name = 'マロウ';
        $stdObj->otherName = 'ウスベニアオイ';
        $stdObj->gakumei = 'Malva sylvestris';
        $stdObj->bunrui = 'アオイ科ゼニアオイ属';
        $stdArray[] = $stdObj;

        return $stdArray;
    }
}

$clas = new controlStdClassArray();
var_dump($clas->createStdClassArrayCast());
var_dump($clas->createStdClassArrayNew());
```

# 参考
- [stdClass Objectを扱う方法 | TechAcademyマガジン](https://techacademy.jp/magazine/18288)
- [LaravelでStdClassが使えない | qs Developers](http://qs.nndo.jp/issue-stdclass-error)
- [stdClassをnewしたらPHP Warning: Creating default object from empty value inとなったときの対応方法 - Qiita](https://qiita.com/ponsuke0531/items/3211dd78d1940b22eea5)