9
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at
  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. 配列をオブジェクトでキャストする

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;
}
$ 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つ設定する

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;
}
$ 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) "アオイ科ゼニアオイ属"
  }
}

全貌

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());

参考

9
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?