質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

6回答

1115閲覧

objectというデータがいまいちわかりません、配列とは違うのですか?

yukina00235

総合スコア63

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

1グッド

0クリップ

投稿2021/04/11 05:50

分かっていないことがうまく説明できないので、変な質問になるかもしれないのですが宜しくお願いいたします。
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で配列を定義したら便利なのでは?とも思ったりいたします。
まだ何も理解ができておりませんが、お詳しい方、何か理解の助けになるアドバイスを頂けますと幸いです

hoshi-takanori👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yukina00235

2021/04/12 04:36

有難うございます。 classについて勉強してみたいと思います。
guest

0

ベストアンサー

一言で言えば、自作の変数と命令を持ったプログラムのブロックです。
まったくの自作の場合もありますが、ファイル操作や画面操作のためなどに用意されたものを名前を付けて操作したりします。したがって、別の名前を与えて同様の能力を持つ複数のオブジェクトを操作することもあります。
オブジェクトを設計し、名前を与えて活用するまどろっこしい操作をするので、その手順になれなければ使えません。
PHPの場合は、

PHP

1 $オブジェクトの実体名 = new オブジェクトのクラス名(引数); 2// と、オブジェクトの実体名を指定しインスタンス化 3 $オブジェクトの実体名->変数 4// または 5 $オブジェクトの実体名->自作の命令(引数)

のように指定して操ります。
ちなみに、以下のようにオブジェクトの実体化をイメージするための動画を作成していますので、よかったら参考にしてみてください。
オブジェクト指向プログラミングの概念を説明するための動画

投稿2021/04/11 12:55

編集2021/04/13 20:44
seastar3

総合スコア2287

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yukina00235

2021/04/12 04:40

有難うございます。 やはり、objectとはobject指向と同じものを指すのですね。 >>PHPの場合は、 >>オブジェクトの実体名->変数 >>または >>オブジェクトの実体名->自作の命令(引数) こちらの説明は何だかとても分かりやすかったです、動画も有難うございます。 拝見させて頂きます、理解が深まる様に頑張ります。
guest

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

seastar3

総合スコア2287

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

PHPに限った話の前に、

オブジェクト指向プログラミング
オブジェクト指向言語

について、概論を読まれることをお勧めします。

投稿2021/04/12 00:24

ppaul

総合スコア24670

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yukina00235

2021/04/12 04:41

有難うございます。 何度か勉強してみたのですが、あまり理解が進まず…。 再度勉強してみます!
guest

0

簡単に言うと「クラスのインスタンス」です。公式リファレンスにも具体例を交えながら様々なことが書いてあります。「オブジェクト指向」というキーワードで勉強するとよいのではないでしょうか。

https://www.php.net/manual/ja/language.oop5.php

配列は array です。PHPの場合はいわゆる「連想配列」を指して array と呼びますね。

全く異なるものなので、簡単に理解するのは難しいと思いますが、気になる場合は調べてみてください。

投稿2021/04/11 06:23

mather

総合スコア6759

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yukina00235

2021/04/12 04:37

有難うございます。 やはりclassを理解しないと難しいようなのですね、勉強してみたいと思います。
guest

0

Objectとは、言語に定義されていない型と認識すればいいと思います。

正確に言うと、基本型もObjectです。
しかし、基本型は文字列型(String)、論理型(Boolean)と表現できるのに対し、自作型はObject型としか表現できません。

下の表現をObjectで表現してしまうと、期待値が分からなくなるため、できるだけ特化した型で表現することが大事です。

文字列型の足し算:"1" + "1" = "11"
整数型の足し算:1 + 1 = 2
オブジェクト型の足し算:?

投稿2021/04/11 06:07

kirimaru

総合スコア29

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yukina00235

2021/04/12 04:35

有難うございます。 色々と調べてみたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問