首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 5 物件導向核心筆記(六):屬性與方法的存取、鏈式呼叫與命名空間

     編輯:PHP 綜合知識

前言

本系列筆記源自《Core PHP Programming》「Classes and Objects」一章。第六節聚焦於物件實例的屬性與方法存取語法、鏈式操作、繼承存取與特殊命名空間(parent/self)。

1. 屬性存取:-> 運算子

物件屬性如同一般變數,**但存取時必須使用 ->,且屬性名不加 $ 符號**:

<?php
class Room {
    public $name;
    public function __construct($name = 'unnamed') { $this->name = $name; }
}

class House {
    public $rooms = [];
}

$home = new House();
$home->rooms[] = new Room('bedroom');
$home->rooms[] = new Room('kitchen');
$home->rooms[] = new Room('bathroom');

// 存取巢狀物件屬性:鏈式 ->
echo $home->rooms[0]->name; // 輸出: bedroom
?>
  • $home->rooms 取得陣列
  • [0] 取得第一個 Room 物件
  • ->name 存取該物件的 name 屬性

2. 方法呼叫:同樣用 ->

方法執行語義與一般函數一致,唯須透過物件實例:

$user = new User('Leon', 'secret');
echo $user->getLastLogin(); // 呼叫方法並輸出回傳值

3. 繼承成員的存取

子類繼承父類所有 public 與 protected 屬性與方法,**存取方式與自有成員完全相同**;若需顯式呼叫父類實現,使用 :: 搭配 parent 命名空間:

class Animal {
    public $blood;
    public function __construct($blood, $name = null) {
        $this->blood = $blood;
        if ($name) $this->name = $name;
    }
}

class Mammal extends Animal {
    public $furColor;
    public function __construct($furColor, $legs, $name = null) {
        parent::__construct('warm', $name); // 顯式呼叫父類建構子
        $this->furColor = $furColor;
        $this->legs = $legs;
    }
}

class Dog extends Mammal {
    public function __construct($furColor, $name) {
        parent::__construct($furColor, 4, $name);
        self::bark(); // 在建構子中呼叫自身靜態/實例方法
    }
    public function bark() { echo "$this->name says 'woof!'"; }
}

$d = new Dog('Black and Tan', 'Angus'); // 輸出: Angus says 'woof!'

4. 動態屬性與方法名稱

PHP 允許執行時以變數決定存取的屬性或方法:

$prop = 'name';
$method = 'getLastLogin';

echo $obj->$prop;       // 存取 $obj->name
echo $obj->$method();   // 呼叫 $obj->getLastLogin()

5. 方法鏈式回傳與設計模式

PHP 5 允許直接對方法回傳值繼續呼叫 ->,無需中介變數:

$obj->getFactory()->createProduct()->process();

此特性支援 Factory、Builder、Fluent Interface 等設計模式,讓 API 更具表達力。

6. 字串內插值中的物件存取

雙引號字串可直接內嵌物件屬性存取(方法需用 {} 包裹):

echo "User: {$user->name}, Last login: {$user->getLastLogin()}";

總結

語法用途範例
$obj->prop存取實例屬性$user->name
$obj->method()呼叫實例方法$user->getLastLogin()
$obj->$varProp動態屬性名$p='name'; $obj->$p
$obj->$varMethod()動態方法名$m='getName'; $obj->$m()
parent::method()呼叫父類方法parent::__construct()
self::method()呼叫當前類靜態/實例方法self::bark()
$a->b()->c()方法鏈式呼叫$factory->create()->run()

掌握這些存取語法,是駕馭 PHP 5 物件模型、實現多型與設計模式的基石。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved