插件窝 干货文章 PHP中权限控制修饰符有哪些

PHP中权限控制修饰符有哪些

public protected 修饰 子类 918    来源:    2025-03-16

在PHP中,权限控制修饰符(也称为访问控制修饰符)用于控制类成员(属性和方法)的访问权限。PHP提供了以下几种权限控制修饰符:

  1. public

    • 公共成员可以在类的内部、外部以及子类中访问。
    • 这是默认的访问控制级别,如果没有指定修饰符,成员将被视为public
    class MyClass {
       public $publicProperty = 'Public Property';
    
       public function publicMethod() {
           echo 'Public Method';
       }
    }
    
    $obj = new MyClass();
    echo $obj->publicProperty;  // 输出: Public Property
    $obj->publicMethod();       // 输出: Public Method
    
  2. protected

    • 受保护的成员只能在类的内部和子类中访问。
    • 外部代码无法直接访问protected成员。
    class MyClass {
       protected $protectedProperty = 'Protected Property';
    
       protected function protectedMethod() {
           echo 'Protected Method';
       }
    }
    
    class MySubClass extends MyClass {
       public function accessProtected() {
           echo $this->protectedProperty;  // 输出: Protected Property
           $this->protectedMethod();       // 输出: Protected Method
       }
    }
    
    $obj = new MySubClass();
    $obj->accessProtected();
    
  3. private

    • 私有成员只能在定义它们的类的内部访问。
    • 子类和外部代码都无法直接访问private成员。
    class MyClass {
       private $privateProperty = 'Private Property';
    
       private function privateMethod() {
           echo 'Private Method';
       }
    
       public function accessPrivate() {
           echo $this->privateProperty;  // 输出: Private Property
           $this->privateMethod();       // 输出: Private Method
       }
    }
    
    $obj = new MyClass();
    $obj->accessPrivate();
    
  4. final

    • final修饰符可以应用于类或方法。
    • 当应用于类时,该类不能被继承。
    • 当应用于方法时,该方法不能在子类中被重写。
    final class FinalClass {
       public function finalMethod() {
           echo 'Final Method';
       }
    }
    
    // 以下代码会导致错误,因为FinalClass不能被继承
    // class SubClass extends FinalClass {}
    
  5. abstract

    • abstract修饰符可以应用于类或方法。
    • 当应用于类时,该类不能被实例化,只能被继承。
    • 当应用于方法时,该方法必须在子类中被实现。
    abstract class AbstractClass {
       abstract public function abstractMethod();
    }
    
    class ConcreteClass extends AbstractClass {
       public function abstractMethod() {
           echo 'Implemented Abstract Method';
       }
    }
    
    $obj = new ConcreteClass();
    $obj->abstractMethod();  // 输出: Implemented Abstract Method
    

这些权限控制修饰符帮助开发者更好地封装代码,控制类的成员的访问权限,从而提高代码的安全性和可维护性。