# 筆記_PHP物件 ---- ###### tags: `PHP` `oop` --- 物件可以組成類別 物件具有多型與繼承 --- [php-what is the difference between instantiated and initialised](https://stackoverflow.com/questions/14587523/php-what-is-the-difference-between-instantiated-and-initialised) class is like template object is duplicate(副本) form class and need use instantiate to creat object in class setting attributes not variable **\*Static is can be attributes OR Method And Static ia not part of object** static靜態表示可以從任何地方訪問他 ```php= class Person{ public $name; public static $drinkingAge = 21; public function setName($name){ this->name = $name; // static 可以從這裡訪問 } public function setDrinkingAge($newAD){ self::$drinkingAge = $newAD } } // don not new class // just need this echo Person::$drinkingAge // 也可以這樣訪問 // use variable because static is not part of object ``` 那為什麼要加入Person class類中 因為分類時將喝酒年齡分類進Person中 所以思考在class中什麼是設定成static屬性 什麼設定成not static --- - 需要加()嗎? - 建構子: 改方法,設置屬性 - 物件成員 - 方法: 物件提供的功能 - 實體化: - 屬性: 作用域存在整個物件 - 物件: 宣告一個類別 從後面往回講吧~ ## 需要加()嗎? 如果建構子需要傳入參數才要下() 不然不用 但養成習慣請都加() ```php= $car = new Car; $car = new Car(5); ``` ## 建構子 不是用來寫判斷邏輯的code,或是載資料內容的地方 主要用來改方法,設置屬性 預先去呼叫方法/呼叫動作 物件裡有很多動作要做,把每個步驟拆成細切成每個方法 最後在建構子統合一次呼叫與執行 **最開始還可以使用類相同名稱的方法, 來做建構子 但現在不能使用!!!會出錯** ![](https://i.imgur.com/13yLkNu.png) ## 物件成員 public 開放成員 private 私有成員 變數前面加_(底線) $_color; private 私有成員 不能從外部被呼叫修改,須經有一個物件內部方法去修改 ## 方法 方法也有物件成員,沒設定都是public 通常方法設為private私有,相關屬性也會設定成私有 ## 實體化 **PHP變數型態特性** PHP變數可以是函式 PHP變數可以是物件 箭頭為指向物件要做的事 ```php= $car = new Car; $car->show(); ``` ## 屬性 作用域存在在整個物件 在物件中的屬性跟變數是不一樣的東西 使用$this $this為物件本體 ```php= // 屬性 public $color; function show(){ return $color; // 變數 } ``` ## 物件 要宣告一個類別 Car就是一個類別 ```php= class Car { } ```