# 筆記_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,或是載資料內容的地方
主要用來改方法,設置屬性
預先去呼叫方法/呼叫動作
物件裡有很多動作要做,把每個步驟拆成細切成每個方法
最後在建構子統合一次呼叫與執行
**最開始還可以使用類相同名稱的方法, 來做建構子
但現在不能使用!!!會出錯**

## 物件成員
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
{
}
```