分かっていないことがうまく説明できないので、変な質問になるかもしれないのですが宜しくお願いいたします。
Wordpressなどを構っていると、取得したデータがobjectというもので返されてきます。
返されるデータは大量にありまして、その中で自分が必要なデータを表示したりするのですが…。
例えばメニュー表示で、メニュー名やリンク先を取得などなど…。
PHP
1<li><a href="<?php echo $items->link:?>"><?php echo $items->title:?></a></li>
このobjectとは一体何なのでしょうか?
何なのか?と言われても困ると思うのですが、配列なのですか?配列の進化版みたいなものですか??
しかし、配列の場合は配列を指定しても-> こんな感じでほしいものを直接取得したりもできないですし…。
また、自分でobjectを作ることもできるのですか?
functionをセットするみたいに、objectを定義できるのでしょうか?
何と申しますか、objectが便利なのはなんとなくわかりますが、決定的な違いの意味というか、objectを一言で言うと…、objectとはズバリ見たいな理由が知りたいのですが伝わりますでしょうか…。
逆に、objectで配列を定義したら便利なのでは?とも思ったりいたします。
まだ何も理解ができておりませんが、お詳しい方、何か理解の助けになるアドバイスを頂けますと幸いです
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答6件
0
classインスタンスのことなので先にclassを知ってないと何も意味が分からない。
https://www.php.net/manual/ja/language.types.object.php
「ただのデータ」ならarrayとobjectにはそんなに違いはない。
json_decode()はarrayかobjectか選べる。
https://www.php.net/manual/ja/function.json-decode.php
php
1$item = json_decode($json, true); 2$item = json_decode($json);
arrayなら
php
1$item['name']
objectなら。stdClassというクラスのインスタンス。
php
1$item->name
「ただのデータ」なら使い方の違いでしかないけどclassのほうが重要なのでやはりclassの理解が先。
投稿2021/04/11 06:17
退会済みユーザー
総合スコア0
0
ベストアンサー
一言で言えば、自作の変数と命令を持ったプログラムのブロックです。
まったくの自作の場合もありますが、ファイル操作や画面操作のためなどに用意されたものを名前を付けて操作したりします。したがって、別の名前を与えて同様の能力を持つ複数のオブジェクトを操作することもあります。
オブジェクトを設計し、名前を与えて活用するまどろっこしい操作をするので、その手順になれなければ使えません。
PHPの場合は、
PHP
1 $オブジェクトの実体名 = new オブジェクトのクラス名(引数); 2// と、オブジェクトの実体名を指定しインスタンス化 3 $オブジェクトの実体名->変数 4// または 5 $オブジェクトの実体名->自作の命令(引数)
のように指定して操ります。
ちなみに、以下のようにオブジェクトの実体化をイメージするための動画を作成していますので、よかったら参考にしてみてください。
オブジェクト指向プログラミングの概念を説明するための動画
投稿2021/04/11 12:55
編集2021/04/13 20:44総合スコア2287
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
オブジェクトの質問にちなんで、かつて、自分の勉強用に設計した扇風機オブジェクトを示します。
// 扇風機オブジェクトを操る senpuuki_sousa1.php
扇風機は電源オンオフ、風力段階、首振りオンオフの3種類の変数を持ちます。
その扇風機を操作する命令は、電源オンオフ操作、風力切替操作、首振り切り替え操作の3種類と、現在の設定状況を答える命令と扇風機に名前を与えるときに初期設定する命令の併せて5つの命令です。このようなクラスを設計すると次のようなプログラムになります。
- 扇風機クラス "senpuuki_class1.php"
PHP
1<?php 2class senpuuki_class{ 3 var $namae; 4 var $onoff; 5 var $dankai; 6 var $kubionoff; 7 8// 扇風機クラスの実体(インスタンス) 9 function senpuuki_class($meisyou){ 10 $this->namae = $meisyou; 11 $this->onoff = False; 12 $this->dankai = 0; 13 $this->kubionoff = False; 14 } 15 16// 扇風機の電源オン 17 function push_sw($sw){ 18 if ($sw="on") { 19 $this->onoff = True; 20 $this->dankai = 1; 21 } else { 22 $this->onoff = False; 23 } 24 } 25 26// 扇風機の風速調節 27 function change_tsuyosa($tsuyosa){ 28 if ($tsuyosa >= 1 & $tsuyosa <= 3) { 29 $this->dankai=(int)$tsuyosa; 30 } else { 31 $this->dankai=1; 32 print("<br>指定した強さが違います。<br>"); 33 } 34 } 35 36// 扇風機の首振り切り替え 37 function change_kubionoff($kubisw){ 38 if ($kubisw="on") { 39 $this->kubionoff = True; 40 } else { 41 $this->kubionoff = False; 42 } 43 } 44 45// 扇風機の動作回答 46 function check_dousa(){ 47 print("名称は、 " . $this->namae . "です。<br/>"); 48 print("電源は、 " . $this->onoff . "です。<br/>"); 49 print("風速は、 " . $this->dankai . "です。<br/>"); 50 print("首振は、 "); 51 if ($this->kubionoff) {print("作動中");} else {print("停止中");} 52 print("です。<br/>"); 53 } 54 55// 扇風機の風速回答 56 function anser_dankai(){ 57 print($this->namae . "の風速は、 " . $this->dankai . "です。<br/>"); 58 if ($this->kubionoff) { 59 switch ($this->dankai){ 60 case 1 : 61 print(" ブ~ン<br/>"); 62 break; 63 case 2 : 64 print(" ブ~ン ブ~ン<br/>"); 65 break; 66 case 3 : 67 print("ブ~ン ブ~ン ブ~ン<br/>"); 68 break; 69 default: 70 print("故障かな?<br/>"); 71 break; 72 } 73 } else { 74 switch ($this->dankai){ 75 case 1 : 76 print(" ブーン<br/>"); 77 break; 78 case 2 : 79 print(" ブーン ブーン<br/>"); 80 break; 81 case 3 : 82 print(" ブーン ブーン ブーン<br/>"); 83 break; 84 default: 85 print("故障かな?<br/>"); 86 break; 87 } 88 } 89 } 90} 91?>
そして、最初にリンク先を示しておいた、この扇風機クラスを涼風とパワーファンと名付けてそれぞれ操作するプログラムが次のコードです。
なお、パワーファンについては扇風機クラス1を改良し、風速切替を3段階から5段階にしてから操作しています。
- 扇風機オブジェクトの操作 "senpuuki_sousa1.php"
PHP
1<?php 2require_once( "senpuuki_class1.php" ); 3// 扇風機オブジェクトを継承し操る senpuuki_sousa2.php 4 5class senpuuki_class_2 extends senpuuki_class { 6// 3段階化だった扇風機の風速調節を5段階化する 7 function change_tsuyosa($tsuyosa){ 8 if ($tsuyosa >= 1 & $tsuyosa <= 5) { 9 $this->dankai=(int)$tsuyosa; 10 } else { 11 $this->dankai=1; 12 print("<br>指定した強さが違います。<br>"); 13 } 14 } 15// 扇風機の風速回答 16 function anser_dankai(){ 17 print($this->namae . "の風速は、 " . $this->dankai . "です。<br/>"); 18 if ($this->kubionoff) { 19 switch ($this->dankai){ 20 case 1 : 21 print(" ブ~ン<br/>"); 22 break; 23 case 2 : 24 print(" ブ~ン ブ~ン<br/>"); 25 break; 26 case 3 : 27 print("ブ~ン ブ~ン ブ~ン<br/>"); 28 break; 29 case 4: 30 print("ブ~ン ブ~ン ブ~ン ブ~ン<br/>"); 31 break; 32 case 5 : 33 print("ブ~ン ブ~ン ブ~ン ブ~ン ブ~ン<br/>"); 34 break; 35 default: 36 print("故障かな?<br/>"); 37 break; 38 } 39 } else { 40 switch ($this->dankai){ 41 case 1 : 42 print(" ブーン<br/>"); 43 break; 44 case 2 : 45 print(" ブーン ブーン<br/>"); 46 break; 47 case 3 : 48 print(" ブーン ブーン ブーン<br/>"); 49 break; 50 case 4: 51 print("ブーン ブーン ブーン ブーン<br/>"); 52 break; 53 case 5 : 54 print("ブーン ブーン ブーン ブーン ブーン<br/>"); 55 break; 56 default: 57 print("故障かな?<br/>"); 58 break; 59 } 60 } 61 } 62} 63 64print("<br/>扇風機オブジェクトを元に、風速5段階に改造した扇風機オブジェクト2を設定する。<br/><br/>"); 65 66// 扇風機 涼風を実体化 67print("扇風機 涼風を実体化<br/><br/>"); 68$suzukaze = new senpuuki_class("涼風"); 69 70// 扇風機 パワーファンを実体化 71print("改造型扇風機 パワーファンを実体化<br/><br/>"); 72$powerfan = new senpuuki_class_2("パワーファン"); 73 74// 涼風をスイッチオン 75print("扇風機 涼風をスイッチオン<br/><br/>"); 76$suzukaze->push_sw("on"); 77 78// 涼風を動作チェック 79print("扇風機 涼風の動作確認<br/><br/>"); 80$suzukaze->check_dousa(); 81 82// パワーファンをスイッチオン 83print("扇風機 パワーファンをスイッチオン<br/><br/>"); 84$powerfan->push_sw("on"); 85 86// パワーファンを動作チェック 87print("扇風機 パワーファンの動作確認<br/><br/>"); 88$powerfan->check_dousa(); 89 90// 涼風を首振りする 91print("扇風機 涼風を首振りに切り替える<br/><br/>"); 92$suzukaze->change_kubionoff("on"); 93 94// 涼風を動作チェック 95print("扇風機 涼風の動作確認<br/><br/>"); 96$suzukaze->check_dousa(); 97 98// 涼風の風速チェック 99print("扇風機 涼風の風速表示<br/><br/>"); 100$suzukaze->anser_dankai(); 101 102// 涼風を風速5にする(エラー表示が出て、風速1になる) 103print("扇風機 涼風を風速5にする(エラー表示が出て、風速1になる)<br/><br/>"); 104$suzukaze->change_tsuyosa(5); 105 106// 涼風の風速チェック 107print("扇風機 涼風の風速表示<br/><br/>"); 108$suzukaze->anser_dankai(); 109 110// パワーファンを風速5にする(パワーファンは、改造型の扇風機なのでエラーにならない。) 111print("扇風機 パワーファンをを風速5にする(パワーファンは、改造型の扇風機なのでエラーにならない。)<br/><br/>"); 112$powerfan->change_tsuyosa(5); 113 114// パワーファンを動作チェック 115print("扇風機 パワーファンの動作確認<br/><br/>"); 116$powerfan->check_dousa(); 117 118// パワーファンの風速チェック 119print("扇風機 パワーファンの風速表示<br/><br/>"); 120$powerfan->anser_dankai(); 121 122?> 123
このようにオブジェクトは変数と命令(メソッド)を規定して、名前を与えて操作します。
投稿2021/04/12 15:51
総合スコア2287
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
PHPに限った話の前に、
オブジェクト指向プログラミング
オブジェクト指向言語
について、概論を読まれることをお勧めします。
投稿2021/04/12 00:24
総合スコア24670
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
簡単に言うと「クラスのインスタンス」です。公式リファレンスにも具体例を交えながら様々なことが書いてあります。「オブジェクト指向」というキーワードで勉強するとよいのではないでしょうか。
https://www.php.net/manual/ja/language.oop5.php
配列は array です。PHPの場合はいわゆる「連想配列」を指して array と呼びますね。
全く異なるものなので、簡単に理解するのは難しいと思いますが、気になる場合は調べてみてください。
投稿2021/04/11 06:23
総合スコア6759
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
Objectとは、言語に定義されていない型と認識すればいいと思います。
正確に言うと、基本型もObjectです。
しかし、基本型は文字列型(String)、論理型(Boolean)と表現できるのに対し、自作型はObject型としか表現できません。
下の表現をObjectで表現してしまうと、期待値が分からなくなるため、できるだけ特化した型で表現することが大事です。
文字列型の足し算:"1" + "1" = "11"
整数型の足し算:1 + 1 = 2
オブジェクト型の足し算:?
投稿2021/04/11 06:07
総合スコア29
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/12 04:36