忍者ブログ

からすまる日誌 mySQL

授業ノートのまとめ

高度(17) カレンダー(3)

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

高度(17) カレンダー(3)

これをクラスにする
 
もしその月にスケジュールがあればそれも表示
それをクリックすると予定が入れられるようにすればいい
 
新規ファイル作成
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枚のページがあってもここだけ直せばすむという利点がある

なおこれにはエラーがある。
正しいのは共有フォルダに。
後であげること。
PR

コメント

ただいまコメントを受けつけておりません。

プロフィール

HN:
karasumaru
性別:
非公開

P R