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

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

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

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

Q&A

解決済

1回答

1256閲覧

PHP 足し引きができるclassが正しく動作してくれません。。

heihoo

総合スコア56

PHP

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

0グッド

2クリップ

投稿2015/03/11 15:09

編集2015/03/11 15:11

初めまして。
PHP初心者です。

プログラミングをはじめて2週間ほどです。
C言語から入り、PHPを勉強中の者です。

Boxという足し引きが出来るclassを作ったのですが、0になってしまいます。。
10から5を引いて5にしたいのですが、うまくいきません。。
原因を教えてください。
お手柔らかにお願いします。。

<?php class Box { private $total; public function Add($add) { echo 2; $total += $add; var_dump($total); return $total; } public function BoxEmpty() { echo 1; return $total = 0; } public function Del($del) { echo 3; $total -= $del; var_dump($total); if ($total < 0) { return $total = 0; } return $total; } public function GetTotal($total) { echo 4; return $total; } } $box = new Box(); $total = $box->BoxEmpty(); $total = $box->Add(10); $total = $box->Del(5); echo $box->GetTotal($total); var_dump($total);

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

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

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

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

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

guest

回答1

0

ベストアンサー

スコープの問題です。

各function内で利用している変数$totalは、ローカル変数なのでそのfunction内でしか有効ではありません。

あなたのやりたい事の場合、Boxクラスのメンバ変数private $total; をfunction全てで使いたいはずなので、各functionで扱っている$totalを$this->totalとしてください。

$thisは自分自身(インスタンス)を差すので、$box = new Box(); した$boxオブジェクトになります。

そして、最後のゲッター
public function GetTotal($total) {}

public function GetTotal() {}
にしてください。

public function GetTotal($total) {
return $total;
}
だと、引数として渡された$totalがそのまま返されてしまいます。

$total = $box->Del(5); の返り値$totalは

public function Del($del) {
$total -= $del;
if ($total < 0) {
return $total = 0;
}
return $total;
}

で、未定義変数-$delで-5は0より小さいため、$total = 0が返されています。ですから0となっているわけです。

上記を修正し、
echo $box->GetTotal();
とすることで、5がエコーされます。

投稿2015/03/11 15:50

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2015/03/11 15:56

<?php class Box { private $total; public function Add($add) { $this->total += $add; } public function BoxEmpty() { $this->total = 0; } public function Del($del) { $this->total -= $del; if ($this->total < 0) { $this->total = 0; } } public function GetTotal() { return $this->total; } } $box = new Box(); $box->BoxEmpty(); $box->Add(10); $box->Del(5); echo $box->GetTotal(); このようになります。
heihoo

2015/03/11 16:37

動作しました! >$thisは自分自身(インスタンス)を差す なるほど! こんなにもおかしなところがあったんですね。。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問