2012年3月23日金曜日

2012年03月22日 講義034日目

2012年03月22日
講義034日目
------------------------------1H------------------------------
★class
  ●classについて
    ・管理が便利
    ・プロジェクトの規模が大きくなるほどクラス化のメリットがある
    ・オブジェクト指向
  ●classの記述方法
    ・変数(メンバ変数)と関数(メソッド)をパッケージングしたもの
  ●クラスとインスタンス
    ・鋳型(クラス)と実態(インスタンス)
  ●kiso.com/class/indexに記述
      <?php
      //クラス名の最初の文字は大文字
      class IdData {
          ■//メンバ変数を定義する
          protected $id = "10";

          ■//関数(メソッド)を定義する
          function getId() {
              //メンバー変数は$this->変数名という形で参照する
              return $this->id;
          }
          function setID($id) {
              $this->id = $id;
          }
      }
      ■//new : クラス定義を元にしてデータを取得(インスタンス化)
      $test = new IdData();
      ■//->クラス内の関数や変数にアクセスする
      echo $test->getId();
      $test->setId("33");
      echo "<br>";
      echo $test->getId();

      echo "<br>別のインスタンスを生成する<br>";
      $test2 = new IdData();
      echo "test2オブジェクトのID:" . $test2->getId() . "<br>";
      echo "testオブジェクトのID:" . $test->getId();
------------------------------2H------------------------------
★class
  ●kiso.com/class/humanに記述
      <?php
      ■//Humanクラスの作成
          ・public
              外部から参照できる
          ・protected
              外部から参照できない
              継承元でも参照できる
          ・private
              外部から参照できない
              自クラスのみ
      Class Human{
          //変数(メンバ変数)を定義
          public $name;
          private $address;
          //関数(メソッド)を定義
          public function setAddress($address){
              $this->address = $address;
          }
          public function getAddress(){
              return $this->address;
          }
      }

      ■//Humanクラスを継承、機能を引き継ぐ
      Class ChildHuman extends Human{
          private $age;
          public function setAge($age){
              $this->age = $age;
          }
          public function getAge(){
              return $this->age;
          }
      ■//親クラス、「Human」の関数を書き換える、オーバーライド。
        //親クラスの関数より優先される
          public function setAddress($address){
              //親クラスの処理を利用する「parent::」
              parent::setAddress($address. "在住");
          }
      }

      ■//インスタンスの生成
      $human = new Human();
      $human1 = new Human();
      //名前をセット
      $human->name = '鈴木';
      $human1->name = '佐藤';
      //住所をセット
      $human->setAddress('神奈川県藤沢市');
      $human1->setAddress('神奈川県横浜市');
      //住所を取り出して表示
      print $human->name."の住所は、".$human->getAddress()."です。\n";
      print $human1->name."の住所は、".$human1->getAddress()."です。\n";

  ●その他キーワード
    ・parent::親クラスを読み込む
    ・メンバ変数を作るときは、今は基本的にprotectedでいい
------------------------------3H------------------------------
★class
  ●コンストラクタ
    ・インスタンスが生成された時に必ず実行されるメソッドの事。
      (インスタンス生成が終了したときに実行されるメソッドをデストラクタ)
    ・print_r($human);でオブジェクトの中身を確認することができる
  ●練習問題
    ・練習問題1
        Dogクラスを定義し、コンストラクタで名前と種類を設定してください。
        Dog クラスに名前をゲットするメソッドを定義し、名前を表示してください。
          <?php
          //Dogクラスを定義し、コンストラクタで名前と種類を設定してください。
          //Dog クラスに名前をゲットするメソッドを定義し、名前を表示してください。
          Class Dog{
              protected $name;
              protected $type;
              function Dog($name, $type) {
                  $this->name = $name;
                  $this->type = $type;
              }
              function getName(){
                  return $this->name;
              }
          }

          $dog = new Dog("ジョン","柴犬");
          echo $dog->getName();
    ・練習問題2
      電卓クラスを定義し、コンストラクタで、2 つの数字を引数として渡し、
      メンバー変数に格納。
      メソッド、plus,minus,multiply,divisionを定義し、
      2 つの数字の足し算、引き算、掛け算、割り算の結果を取得し表示してください。
          <?php
          //電卓クラスを定義し、コンストラクタで、2 つの数字を引数として渡し、
          //メンバー変数に格納。
          //メソッド、plus,minus,multiply,divisionを定義し、
          //2 つの数字の足し算、引き算、掛け算、割り算の結果を取得し表示してください。
          Class Dentaku{
              protected $num1;
              protected $num2;
              function Dentaku($one,$two) {
                  $this->num1 = $one;
                  $this->num2 = $two;
              }
              function plus(){
                  return $this->num1 + $this->num2;
              }
              function minus(){
                  return $this->num1 - $this->num2;
              }
              function multiply(){
                  return $this->num1 * $this->num2;
              }
              function division(){
                  if($this->num2 == 0){
                      return 0;
                  }
                  return $this->num1 / $this->num2;
              }
          }

          $dentaku = new Dentaku("2","3");
          echo "足し算の結果:" .$dentaku->plus()."<br>";
          echo "引き算の結果:" .$dentaku->minus()."<br>";
          echo "掛け算の結果:" .$dentaku->multiply()."<br>";
          echo "割り算の結果:" .$dentaku->division()."<br>";
------------------------------4H------------------------------

  ●/BBS/lib/MySubmitUtil.class.php
    ・をclass化していく
  ●ctl+shift+F
    ・preiadesのショートカット、PHPのコードを自動で修正してくれる
      htmlが入ってるとやや不完全に修正する
------------------------------5H------------------------------
★BBSのできるところのクラス化
------------------------------6H------------------------------
★BBSのできるところのクラス化
-----------------------------memo------------------------------
クラスへの理解がいまいちだ
作って触って慣れていくしかない

0 件のコメント:

コメントを投稿