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

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

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

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

Q&A

解決済

1回答

2085閲覧

オブジェクト指向で書いてみて分からないこと("new"とメンバ変数)

yutaishikawa_

総合スコア58

PHP

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

0グッド

1クリップ

投稿2015/07/30 06:40

クラス化することについて、まだ理解できているようで出来ていないことが多かったので質問させていただきます。

1 . index.phpに記載している、インスタンスを"new"したあとの、$cal->setTimeStamp();や$cal->query();のような書き方は、なにを意味しているか教えてください。
(教本にこうやって書くということは記載されていましたが、意味はありませんでした)
(ちなみにnewの意味合いとして、インスタンスを生成するという意味合いで捉えてますが、間違えないでしょうか。)
2 . Calenderクラスのメソッドがたくさんあるため、メンバ変数が乱立してしまいましたが、($~をたくさん記載してしまっていますが)何か問題はありますか?

よろしくお願いします
下記コードは質問内容とマッチしてます。

index.php

PHP

1<?php 2require_once('calender.php'); 3 4$cal = new Calender(); 5// ↓これは一体なにしてるの? 6$cal->setTimeStamp(); 7// ↓これも一体なにしてるの? 8$cal->query(); 9?>

calender.php

PHP

1class Calender extends dbconnect { 2 protected $weeks = array(); 3 protected $timeStamp; 4 protected $task = ''; 5 protected $userData = array(); 6 protected $taskData = array(); 7 8 // mysqli の メソッド 9 public function __construct(){ 10 $dbconnect = new dbconnect(); 11 if ($this->timeStamp === false) { 12 $this->timeStamp = time(); 13 } 14 parent::ConnectDb(); 15 } 16 // 現在の日時取得 (Y-m) 17 public function setTimeStamp(){ 18 $ym = isset($_GET['ym']) ? $_GET['ym'] : date("Y-m"); 19 $this->timeStamp = strtotime($ym . "-01"); 20 if ($this->timeStamp === false){ 21 $this->timeStamp = time(); 22 } 23 } 24 // カレンダー作成 25 public function query() { 26 $lastMonth = date("Y-m-d",strtotime("last day of - 1 month",$this->timeStamp)); 27 $nextMonth = date("Y-m-d",strtotime("first day of + 1 month",$this->timeStamp)); 28 $userData = array(); 29 // PHP->MySQLtable 30 $query = $this->mysqli->query("SELECT * FROM tasks WHERE task_date > '$lastMonth' AND task_date <'$nextMonth'"); 31 if (!$query) { 32 die('クエリーが失敗しました。'.mysql_error()); 33 } 34 while($row = $query->fetch_assoc()) { 35 $userData[date('j',strtotime($row['task_date']))] = array( 36 'id' => $row['id'], 37 'title' => $row['title'], 38 'task_date' => $row['task_date'], 39 'place' => $row['place'], 40 'memo' => $row['memo'], 41 ); 42 } 43}

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

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

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

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

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

ozwk

2015/07/30 07:51

1.は「~メソッドを呼んでいる」としか答えようがないので、できれば何がわからないかもう少し具体的にお願いします
yutaishikawa_

2015/07/30 08:00

大雑把に、「〜メソッドを呼んでいる。」というのがわからなかったので助かりました・・・^^;
guest

回答1

0

ベストアンサー

->(アロー演算子)
はオブジェクトのメンバにアクセスするためのものです。
setTimeStamp内の$this->timeStampも自身の$timeStampにアクセスしています。

$cal->setTimeStamp();

インスタンスオブジェクト(cal)のメソッドsetTimeStamp()を実行しています。
メソッドはインスタンスの$timeStampに日時を入力してるようです。

$cal->query();

上記と同様で、calのqueryメソッドを実行します。
具体的には、DBから日に対応したデータを取ってきて、
calの$userDataって配列の要素に代入しているみたいです。
タスク管理のカレンダーですかね。

newの意味合いとして、インスタンスを生成する

はいCalenderクラスからインスタンスオブジェクトを新規作成します。

表示用のコードやメソッドが見当たらないので
提示されたコードだけを実行しても画面にはなにも変化は起きないと思います。

2 . Calenderクラスのメソッドがたくさんあるため、メンバ変数が乱立してしまいましたが、($~をたくさん記載してしまっていますが)何か問題はありますか?

特に問題はありません。
$はその直後の文字列が変数であることを示す記号ですね。

投稿2015/07/30 07:51

hirohiro

総合スコア2068

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問