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.' love '.$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;
沒有留言:
張貼留言