访问控制 #

一、访问修饰符 #

1.1 三种修饰符 #

修饰符 类内部 子类 外部
public
protected
private

1.2 属性访问控制 #

php
<?php
class User
{
    public string $name;
    protected int $age;
    private string $password;
    
    public function setAge(int $age): void
    {
        $this->age = $age;
    }
    
    public function getAge(): int
    {
        return $this->age;
    }
    
    public function setPassword(string $password): void
    {
        $this->password = password_hash($password, PASSWORD_DEFAULT);
    }
}

1.3 方法访问控制 #

php
<?php
class Order
{
    public function process(): void
    {
        $this->validate();
        $this->calculate();
        $this->save();
    }
    
    protected function validate(): bool
    {
        return true;
    }
    
    private function calculate(): void
    {
    }
    
    private function save(): void
    {
    }
}

二、实际应用 #

2.1 封装 #

php
<?php
class BankAccount
{
    private float $balance = 0;
    
    public function deposit(float $amount): void
    {
        if ($amount > 0) {
            $this->balance += $amount;
        }
    }
    
    public function withdraw(float $amount): bool
    {
        if ($amount > 0 && $this->balance >= $amount) {
            $this->balance -= $amount;
            return true;
        }
        return false;
    }
    
    public function getBalance(): float
    {
        return $this->balance;
    }
}

2.2 继承中的访问控制 #

php
<?php
class Animal
{
    protected string $name;
    
    public function __construct(string $name)
    {
        $this->name = $name;
    }
    
    protected function eat(): void
    {
        echo "{$this->name} is eating\n";
    }
}

class Dog extends Animal
{
    public function bark(): void
    {
        echo "{$this->name} is barking\n";
    }
    
    public function feed(): void
    {
        $this->eat();
    }
}

三、总结 #

本章学习了:

  • public、protected、private的区别
  • 属性访问控制
  • 方法访问控制
  • 封装实现

下一章将学习继承。

最后更新:2026-03-26