📜  PHP的public、private 和 protected 之间有什么区别?(1)

📅  最后修改于: 2023-12-03 15:18:34.414000             🧑  作者: Mango

PHP的public、private 和 protected 之间有什么区别?

在 PHP 中,public、private 和 protected 是三个关键字,用于限制类属性和方法的访问级别。它们被称为访问修饰符。

public

public 是最常用的访问修饰符。当一个属性或方法被声明为 public 时,它可以被任何代码访问,包括类外部的代码。

class MyClass{
    public $name;
    public function sayHello(){
        echo 'Hello, '.$this->name;
    }
}

$obj = new MyClass();
$obj->name = 'PHP';
$obj->sayHello(); //输出:Hello, PHP

在上面的例子中,我们声明了一个 MyClass 类,它有一个 public 属性 $name 和一个 public 方法 sayHello(),它们可以被类外部的任何代码访问和调用。

private

private 是一种更为严格的访问修饰符。当一个属性或方法被声明为 private 时,它只能被在该类的内部访问和调用,而无法被类外部的代码访问。

class MyClass{
    private $name;
    private function sayHello(){
        echo 'Hello, '.$this->name;
    }
    public function setname($name){
        $this->name = $name;
    }
    public function getname(){
        $this->sayHello();//只可以在类内部调用
    }
}

$obj = new MyClass();
$obj->setname('PHP');
$obj->getname(); //输出:Hello, PHP

在上面的例子中,我们声明了一个 MyClass 类,它有一个 private 属性 $name 和一个 private 方法 sayHello(),它们只能被该类的其他方法访问和调用,并且无法被类外部的代码访问。

protected

protected 与 private 类似,但是它允许子类访问和调用被保护的属性和方法。

class MyClass{
    protected $name;
    protected function sayHello(){
        echo 'Hello, '.$this->name;
    }
}
class TestClass extends MyClass{
    public function setname($name){
        $this->name = $name;
    }
    public function getname(){
        $this->sayHello();//可以在子类里进行调用
    }
}

$obj = new TestClass();
$obj->setname('PHP');
$obj->getname(); //输出:Hello, PHP

在上面的例子中,我们定义了两个类:MyClass 和 TestClass,MyClass 有一个 protected 属性 $name 和一个 protected 方法 sayHello(),它们可以被 TestClass 继承和使用。在 TestClass 中,我们使用了 setname() 方法来设置 $name 属性的值,并使用 getname() 方法来调用 sayHello() 方法。由于 sayHello() 方法是被保护的,所以只能在子类中访问和调用。

总结

在 PHP 中,public、private 和 protected 是三个关键字,用于限制类属性和方法的访问级别。public 是最常用的访问修饰符,它可以被任何代码访问;private 是更为严格的访问修饰符,它只能在类的内部访问和调用;protected 是介于 public 和 private 之间的访问修饰符,它允许子类访问和调用被保护的属性和方法。通过合理的使用这些访问修饰符,我们可以更好地控制代码的访问和调用权限。