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

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

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

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

Q&A

解決済

1回答

1215閲覧

PHPを学習中なのですが、コードの間違いがわかりません。

HirokiSasaki

総合スコア8

PHP

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

0グッド

0クリップ

投稿2016/10/10 05:54

編集2016/10/10 06:13

###前提・実現したいこと
現在、PHPを勉強しており、クラスについて学習中です。
Carというクラスを作り、myCarとyourCarといオブジェクトを作成し、それらに油量($Oil)とナンバー($Nunber)というメンバ変数で情報を記録/表示するというものなのですが、エラーが出て想定した実行結果が出ません。
ご教示いただきたく考えております。

###発生している問題・エラーメッセージ

Fatal error: Call to undefined function setNumber() in /home/ubuntu/workspace/index.php on line 33 Call Stack: 0.0015 240320 1. {main}() /home/ubuntu/workspace/index.php:0 0.0015 240576 2. Car->__construct() /home/ubuntu/workspace/index.php:10

###該当のソースコード

PHP

1<!doctype HTML> 2<html> 3 <head> 4 <title>sample page</title> 5 <meta charset="utf-8"> 6 </head> 7 <body> 8 <?php 9 10 $myCar = new Car(1111, 4.5); 11 $yourCar = new Car(2222, 3.4); 12 13 print "<p>myCar's Number: "; 14 print $myCar->getNumber(); 15 print "<br>"; 16 print "myCar's Oil: "; 17 print $myCar->getOil(); 18 print "<br>"; 19 print "yourCar's Number: "; 20 print $yourCar->getNumber(); 21 print "<br>"; 22 print "yourCar's Oil: "; 23 print $yourCar->getOil(); 24 print "</p>"; 25 26 27 // クラス 28 class Car{ 29 private $number = 0; 30 private $oil = 0; 31 32 public function __construct($num, $oi){ 33 setNumber($num); 34 setOil($oi); 35 } 36 37 public function setNumber($num){ 38 $this->number = $num; 39 } 40 41 public function setOil($oi){ 42 if($oi >= 0){ 43 $this->oil = $oi; 44 } else { 45 return -1; 46 } 47 } 48 49 public function getNumber(){ 50 return $this->number; 51 } 52 53 public function getOil(){ 54 return $this->oil; 55 } 56 57 } 58 ?> 59 </body> 60</html>

###試したこと
現在「やさしいPHP(3版)」で学習をしており、コードが誤っていないかなどを前の例文など見ながら確認しましたが、間違いに気づけませんでした。
※これは章末問題となり、回答が記載されておりません。

###補足情報(言語/FW/ツール等のバージョンなど)
cloud9にてコーディング/実行を行っております。

お手数をおかけしますが、よろしくお願いいたします。

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

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

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

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

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

toutou

2016/10/10 06:01

質問させてください。setNumberはPHPに元からある関数でしょうか?それとも自分で作れた関数でしょうか?
HirokiSasaki

2016/10/10 06:03

ご質問ありがとうございます。setNumberはCarクラス内で自分で作成したものとなります。
toutou

2016/10/10 06:05

public function __construct($num, $oi)の中にその関数があるのにその下で作ってるように見えたんですがどうですか?
HirokiSasaki

2016/10/10 06:07

__construct($num, $oi)にて関数を呼び出しており、その下に関数そのものをその下に定義しているつもりだったのですが、順序がおかしいということでしょうか?試してみます!
HirokiSasaki

2016/10/10 06:09

試してみましたが、変わらずエラーが出ました……。コードが変わりましたので、質問を修正させていただきます(コード/エラー)。
toutou

2016/10/10 06:10

すいません勘違いっぽいです。元に戻しても大丈夫です。失礼しました。
退会済みユーザー

退会済みユーザー

2016/10/10 06:13

コンストラクタ内部で読み込んでるのはグローバル関数の setNumber / setOil になっているのでこのエラーになりますね。
HirokiSasaki

2016/10/10 06:13

承知しました。一つ凡ミス(関数のスペルミス)がありましたので修正しました(エラーはなくなってはいません)
HirokiSasaki

2016/10/10 06:16

unknown00012様> つまり、こちらは$this->setNumberや$this->setOilにすれば良いということでしょうか?試してみます。
HirokiSasaki

2016/10/10 06:19

unknown00012様> 無事解決しました! ご助力いただきましてありがとうございました!
guest

回答1

0

自己解決

toutou様、unknown00012様にご協力いただき、無事解決することができました。
Carクラス内の__constructメソッドで$thisをつけ忘れていたことが原因でした。
メンバ変数に$thisをつけるのはわかっていましたが、メソッドにつける必要が有ることに気づけていませんでした。
ご助力、ありがとうございました。

投稿2016/10/10 06:25

HirokiSasaki

総合スコア8

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

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

toutou

2016/10/10 06:26

まったくお役に立てませんでした。すみません。
HirokiSasaki

2016/10/10 06:28

とんでもありません! ご助力いただきましてありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問