2014年9月22日 星期一

【筆記】建立class,使用class

一、 建立class
class People {} -> 寫屬性和方法

class People {
    //定義屬性
    public  $name = "SoRa";

    //定義方法
    function getMsg(){
       return "hello";
    }
}



二、使用 class
1.  $變數 = new 類別(參數1....);
//實體化
$test1 = new People();
$test1 -> name = "Cloud";
echo "welcome";
echo $test1->name."<br />";  
//由於上面是public ,所以可以直接複寫,如果是private,就不能,訪問權限問題
echo $test1->getMsg();


2.  如果想使用private 的 屬性和方法,就要使用$this
class Dog {
    privete $name = "little";

    function getMsg(){
        return $this->name;
    }
}
$test2 = new Dog();
echo $test2->getMsg();

3. php (.) 為串接,所以使用(->)

三、構造函數
構造函數是類中的一個特殊函數,當使用 new 動作符建立一個類的案例時,構造函數將會自動呼叫。當函數與類同名時,這個函數將成為構造函數。若果一個類沒有構造函數,則呼叫基類的構造函數。

不允許重複定義構造函數

class People{

    private $name;
    /*Java 風格 函數名和類別要一樣
    function People($name){
       $this->name = $name;
    }
    */
    //偏向python
    function  __construct($n){
       $this->name= $n;
    }

    function getMsg(){
       return $this->name;
    }
}

$test3 = new People("Sora");
echo $test3->getMsg();


4. 相關構造函數
__construct  //class被實體化的時候使用
__destruct   //class被銷毀的時候使用
__call //不想報錯  調用一個類不存在的方法,實現一些特殊功能 一般用來記錄user 的非法使用

5. var_dump(類對象)  //ex.  var_dump($test3)

6. get & set
   (1) java:
     public void setUsername(String username) {
        this.username = username;
     }
     public String getPassword() {
        return password;
     }

 
  (2)php : 直接簡化成__get  __set
    class People{
        function __set($key, $val){
            $this->$key = $val;
        }

        function __get($key){
            return $this->key;
        }
    }

   $test = new People();
   $test->id = "Sora";
   $test->hobby = "sleeping";
   echo $test->id.'&nbsp;love&nbsp;'.$test->hobby;

7. 多態
8. 封裝
9 .靜態屬性 參考連結   :  代表這屬性對於此class是唯一的,不管有多少對象
    ::代表域符號,不能使用->,因為他是靜態變數
  (1)
    class People{
        public static $id;
    }

    $test = new People();
    $test::$id="sora";  //定義
    $test = new People();
    echo $test::$id;
   
  (2) 下面例子測試靜態屬性
    class People{
       public static $count = 1;

        function __construct(){
           echo "這是第", self::$count;
           echo "次實體化","<br />";
           self::$count++;
        }
    }
    $test1 = new People();
    $test2 = new People();
    $test3 = new People();
 
   (3) 如果不用靜態屬性而是用一般屬性的話
    class People{
        public $count = 1;
       
        function __construct(){
           echo "這是第", $this->count;
           echo "次實體化","<br />";
           $this->count++;
        }
    }    $test1 = new People();
    $test2 = new People();
    $test3 = new People();


10. 靜態方法:代表此方法使屬於這個class的
      靜態方法不需要實體化就可以使用,一般方法和一般屬性都必須先new一個對象才能使用,所以靜態方法裡是不能用一般方法

    class People{
        static function kind($name){
          echo "人種:";
          echo $name;
          echo "<br />";
        }
    }
     People::kind("黃種人");
    $test1 = new People();
    $test1->kind("白種人");

11. 常數:常數的定義是指永久不會變的內容稱之為常數
   
    class People{
         const name = "sora";
         const doing = "reading";
    }    echo People::name;
    $test = new People();
    echo $test::doing;

沒有留言:

張貼留言