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

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

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

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

Q&A

2回答

1344閲覧

phpのオブジェクト

Tom_SQAIR

総合スコア20

PHP

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

0グッド

1クリップ

投稿2015/11/27 22:38

php

1 <?php 2 $object = new User; 3 print_r($object); echo "<br/>"; 4//=>User Object ([name] => [password=>]) 5 6 $object -> name = "Joe"; 7 $object -> password ="mypass"; 8 print_r($object); echo "<br/>"; 9//=>User Object ([name] => Joe [password=> mypass]) 10 11 $object -> save_user(); 12//=>Save User code goes here 13 14 class User 15 { 16 public $name,$password; 17 function save_user() 18 { 19 echo "Save User code goes here"; 20 } 21 } 22 ?> 23

なぜ一回目と二回目のprint_r($object); echo "<br/>";は出力する値が異なるのでしょうか?

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

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

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

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

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

guest

回答2

0

身近な例で例えると、
User クラスは空の冷蔵庫みたいなもので、print_r()は冷蔵庫の中身を表示する関数です。

PHP

1$object = new User;

は「冷蔵庫を買ってくる」ようなイメージで(クラスをインスタンス化してオブジェクトを生成する)
その直後にprint_r()をしても冷蔵庫の中身はありません。

PHP

1 $object -> name = "Joe"; 2 $object -> password ="mypass";

では冷蔵庫の1段目にJoeを2段目にmypassを入れました。
そのため、この後にprint_rすると中身であるところのJoeとmypassが見えます。

投稿2015/11/27 22:46

tanat

総合スコア18709

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

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

Tom_SQAIR

2015/11/27 22:53

name 、password と "Joe" "mypass"は同じところで定義されていますよね? なのに一回目の出力がプロパティしか出力されないのはなぜですか?
tanat

2015/11/27 23:16

>name 、password と "Joe" "mypass"は同じところで定義されていますよね? 同じところというのは何行目を差していますか? Joe,mypassがオブジェクトにセットされているのは 最初のprint_r()より後の8,9行目 > $object -> name = "Joe"; > $object -> password ="mypass"; です。
Tom_SQAIR

2015/11/28 01:15

8.9行目までいかないとオブジェクトが何かわかりませんよね? なのにプロパティはname,passwordと出ているのにも関わらず なぜその値は出力されないのでしょうか
tanat

2015/11/28 02:46

うーん、何かクラスとオブジェクトの関係について誤解があるように思います。 > 8.9行目までいかないとオブジェクトが何かわかりませんよね? 「オブジェクトが何か」というのが何を挿しているのかよく分かりませんが、 2行目で $object = new User; としているので、Userクラスのオブジェクトだという事が分かります。 Userクラスでは デフォルト値の無いプロパティが public $name,$password; と定義されています。 これは インスタンス化されたタイミングではそれぞれのプロパティ nameとpasswordにそれぞれ値が設定され無い状態で オブジェクトに格納されることを示します。 *プロパティはあるが、値が空ということです。 3行目のprint_r()ではその状態を表示するため、 プロパティそのものは見えるが、値は見えない(正確には値が設定されていないことが表示される) となります。
Tom_SQAIR

2015/12/07 05:48

例えば冷蔵庫や冷凍庫等の収納があってそれに食材が入ってるとして いきなりどんな収納に何が入ってるか?と言われてもわかりませんよね? ------------------------------------------------------------------------------ 最初のprint_r()より後の8,9行目 > $object -> name = "Joe"; > $object -> password ="mypass"; です。 ------------------------------------------------------------------------------- とおっしゃったように、冷凍庫(name)に魚(Joe)、冷蔵庫(password)に野菜(mypass)があると分かって収納と食材の存在が明確になりますよね? なのにそれが提示される前になんで冷凍庫(name)や冷蔵庫(mypass)等の収納(プロパティ名)が分かるのでしょうか?
tanat

2015/12/07 06:14 編集

ああ、やっと疑問としている点が理解出来ました。 > なのにそれが提示される前になんで冷凍庫(name)や冷蔵庫(mypass)等の収納(プロパティ名)が分かるのでしょうか? 「この冷蔵庫にはnameとpasswordのみ収納でき、それぞれの収納スペースにはその収納するものの種類を書いておく。冷蔵庫を作成した時点ではそれぞれの収納スペースは空の状態にしておく」 >public $name,$password; と設計された冷蔵庫だからです。 newする(設計図から実物を作る)時点で冷蔵庫の棚に[name][password]と収納するものが記載されている状態で実物が作られるので、print_r(冷蔵庫の扉を開ける)すると、その[name][password]のそれぞれ収納スペースがあることと、そこに何も入っていないことが分かります。
guest

0

print_r($object); はUserのインスタンスである$objectを表示します。1回目はUserの属性$name, $passwordが設定されていません。一方、2回目のprint_r($object); の前には
$object -> name = "Joe";
$object -> password ="mypass";
という文があり、ここで、$name, $passwordを設定しています。そのため、2回目のprint_r($object);ではこれらの値が表示されることになります。

投稿2015/11/27 22:46

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Tom_SQAIR

2015/11/27 22:53

name 、password と "Joe" "mypass"は同じところで定義されていますよね? なのに一回目の出力がプロパティしか出力されないのはなぜですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問