---
# System prepended metadata

title: 筆記_PHP物件
tags: [PHP, oop]

---

# 筆記_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
{

}

```


