PHP面向对象-访问控制

2023-04-27 19:50:26 浏览数 (1)

public访问控制

public访问控制是最常用的一种,它表示对象属性和方法可以在任何地方访问,包括类的外部。例如:

代码语言:javascript复制
phpCopy codeclass Person {
    public $name;

    public function greet() {
        echo "Hello, my name is " . $this->name;
    }
}

$person = new Person();
$person->name = "John";
$person->greet(); // 输出 "Hello, my name is John"

在上面的示例中,$name属性和greet()方法都被声明为public,因此可以从类的外部访问。在创建新的Person对象后,可以使用$person->name属性设置$name属性的值,并调用$person->greet()方法输出相应的消息。

private访问控制

private访问控制表示对象属性和方法只能在类内部访问。这意味着,在类的外部无法直接访问或修改私有属性或方法。例如:

代码语言:javascript复制
class Person {
    private $name;

    public function setName($name) {
        $this->name = $name;
    }

    public function greet() {
        echo "Hello, my name is " . $this->name;
    }
}

$person = new Person();
$person->setName("John"); // 正确
$person->greet(); // 报错,因为$name是私有属性,无法从外部访问

在上面的示例中,$name属性被声明为private,因此无法从类的外部直接访问。相反,可以通过一个名为setName()的public方法来设置$name属性的值,并通过$person->greet()方法输出相应的消息。

protected访问控制

protected访问控制表示对象属性和方法只能在类内部和其子类中访问。这意味着,类的外部无法直接访问或修改受保护的属性或方法。例如:

代码语言:javascript复制
class Person {
    protected $name;

    public function setName($name) {
        $this->name = $name;
    }
}

class Employee extends Person {
    public function greet() {
        echo "Hello, my name is " . $this->name;
    }
}

$employee = new Employee();
$employee->setName("John"); // 正确
$employee->greet(); // 输出 "Hello, my name is John"

在上面的示例中,$name属性被声明为protected,因此无法从类的外部直接访问。相反,可以通过一个名为setName()的public方法来设置$name属性的值,并通过Employee类中的greet()方法输出相应的消息。由于Employee类是Person类的子类,因此可以在子类中访问protected属性。

php

0 人点赞