これをクラスにする
もしその月にスケジュールがあればそれも表示
それをクリックすると予定が入れられるようにすればいい
新規ファイル作成
calendar.class.php
phpはかならず必要なのでこう記す
ひとによってルールが違ったりする
calendar.phpにするひともいるらしい
class Calendar{
}
クラス名の最初の文字は大文字
呼び出されたときのコンストラクタとなる関数を記述
半角スペースとアンダーバーを2つ使うという約束がある
index.phpからコピーして貼り付けるが
このままだとまだまずい
phpとhtmlのダブルコートがごちゃごちゃしている
echo "<div id=\"year_month\"><?php echo $y ."年" . $m . "月"; ?><img src=\"../img/fish_piraiba.png\"></div>";
こうする
ややこしい
このままではechoのなかにecnoなので精査する
変数ですって断りのために変数を{}でくくる
これを()にしていたので間違えてしまった
echo "<div id=\"year_month\">($y)年($m)月<img src=\"../img/fish_piraiba.png\"></div>";
ついでにindexでもあらかじめクラスファイルをリクワイアーする
require_once("class/calendar.class.php");
スコープを省略すると自動にパブリックになる
外部から使えますよという意味
class Calendar{
public function __construct($y,$m){
echo "<div id=\"year_month\">{$y}年{$m}月<img src=\"../img/fish_piraiba.png\"></div>";
}
}
外から直接呼び出さないメソッド→private
外から呼び出されるメソッド→public
とすみわけする。
しかし本来コンストラクタさんがやることはこれじゃないかも(とりあえずやったが)
本来コンストラクタがするのはデータベースへの接続と、
スケジュールがあったらどうするかという部分のはずらしい。
calendar.class.php
<?php
class Calendar{
public function __construct($y,$m){
echo "<div id=\"year_month\">{$y}年{$m}月<img src=\"../img/fish_piraiba.png\"></div>";
//--- db接続情報 ---
$host = "localhost";
$dbuser = "root";
$dbpass = "";
$dbname = "calendar";
$dsn = "mysql: host={$host}; dbname={$dbname}; charset=utf8";
$pdo = new PDO($dsn, $dbuser, $dbpass);
}
}
?>
しかしクラス内で宣言した変数はクラス内しかスコープがない
$pdoはほかでも使いたい
よって外側で宣言しておく
プロパティの中に変数を入れる、らしい
$this-> pdo = new PDO($dsn, $dbuser, $dbpass);
この記述は
「このクラスの中のpdo」という意味(おそらくコンストラクタの外側のclass Calendarを指すと思われる)
「呼び出し元」のthisの意味ではない。呼び出し元のthisという使い方をするのはjavaScriptだけ!
$this-> pdoとは
java風に書くなら
$this.pdo
このクラスのpdoさん。
なお$this-> $pdoとは書かない。$、$になってしまう。変数はひとつ
「どうしてクラスにするのか」という必然性が
どの授業でも全然ぴんとこないが私の頭があほなのか?
$stmt = $this->pdo->prepare($sql);
遠くにあるpdo変数にアクセスしたのでこういう書き方になるらしい
アローで3つ編成とか理解を超える
こんがりしてもさっぱり意味が分からないが、
とりあえずここまで
calender.class.php
<?php
class Calendar{
private $pdo;
public function __construct($y,$m){
echo "<div id=\"year_month\">{$y}年{$m}月<img src=\"../img/fish_piraiba.png\"></div>";
//--- db接続情報 ---
$host = "localhost";
$dbuser = "root";
$dbpass = "";
$dbname = "calendar";
$dsn = "mysql: host={$host}; dbname={$dbname}; charset=utf8";
$this-> pdo = new PDO($dsn, $dbuser, $dbpass);
}
private getSchedule($y,$m){
$sql = "SELECT d,schedule FROM schedules WHERE y=:y AND m=:m";
$stmt = $this->pdo->prepare($sql);
$stmt -> bindValue(":y", $y, PDO::PARAM_INT);
$stmt -> bindValue(":m", $m, PDO::PARAM_INT);
$stmt->execute();
}
}
?>
こうするのは処理を一か所でかくことで
100枚のページがあってもここだけ直せばすむという利点がある
なおこれにはエラーがある。
正しいのは共有フォルダに。
後であげること。