>백엔드 개발 >PHP 튜토리얼 >PHP 객체 지향 프로그래밍 소개: 액세스 한정자를 사용하여 객체 속성 및 메서드를 보호하는 방법

PHP 객체 지향 프로그래밍 소개: 액세스 한정자를 사용하여 객체 속성 및 메서드를 보호하는 방법

WBOY
WBOY원래의
2023-07-30 14:12:32846검색

PHP 객체 지향 프로그래밍 소개: 액세스 한정자를 사용하여 객체의 속성과 메서드를 보호하는 방법

PHP에서 객체 지향 프로그래밍(OOP)은 매우 일반적이고 강력한 프로그래밍 방법입니다. 이러한 방식으로 엔터티를 객체로 추상화하고 해당 속성과 메서드를 정의하여 해당 동작을 설명할 수 있습니다. 그러나 때로는 내부 상태와 일부 주요 메서드를 보호하기 위해 객체에 대한 액세스를 제한해야 할 때도 있습니다. 이러한 목적을 위해 PHP는 이러한 목적을 달성하는 데 도움이 되는 액세스 수정자를 제공합니다.

PHP에는 공개, 비공개, 보호라는 세 가지 일반적으로 사용되는 액세스 수정자가 있습니다. 다양한 액세스 한정자는 외부 세계에 대한 객체 속성 및 메서드의 가시성과 접근성을 정의합니다. 아래에서는 이 세 가지 접근 수정자의 사용법을 자세히 소개합니다.

  1. 공개 액세스 수정자

공개 액세스 수정자는 가장 일반적인 수정자입니다. 즉, 객체의 속성과 메서드를 어디에서나 액세스하고 호출할 수 있습니다. 액세스 수정자를 정의하지 않은 경우 기본값은 공용 액세스 수정자입니다.

일반적으로 클래스의 속성은 private 또는 protected로 정의하고, 메소드는 public으로 정의하여 외부 코드가 해당 메소드를 통해 객체의 속성에 접근하고 조작할 수 있도록 합니다. 다음은 공개 액세스 수정자를 사용하는 예입니다.

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

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

위 코드에서는 $name 속성과 sayHello( )를 사용하여 <code>Person 클래스를 정의합니다. 메서드는 모두 공개됩니다. $name을 공용 속성으로 설정하면 외부 코드에서 속성 값을 직접 수정하고 액세스할 수 있습니다. sayHello() 메서드는 객체를 인스턴스화하고 메서드를 호출하여 외부 코드로 인사말을 인쇄할 수 있습니다. Person类,其中$name属性和sayHello()方法都是公有的。通过将$name设置为公有属性,外部代码可以直接修改和访问该属性的值。而sayHello()方法可以在外部代码中通过实例化对象并调用该方法来打印输出一条问候语。

  1. 私有(private)访问修饰符

私有访问修饰符表示对象的属性和方法只能在所属的类内部访问和调用,外部代码无法直接访问。为了访问私有属性和方法,我们需要使用类内部定义的公有方法。下面是一个使用私有访问修饰符的示例:

class Person {
  private $name;
  
  public function setName($name) {
    $this->name = $name;
  }
  
  public function sayHello() {
    echo "Hello, my name is ".$this->name;
  }
}

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

在上面的代码中,$name属性被定义为私有的,外部代码无法直接访问。为了对该属性赋值,我们定义了一个公有的setName($name)方法,并在其中通过方法内部访问私有属性来设置其值。同样,sayHello()方法可以在外部代码中通过实例化对象并调用该方法来打印输出问候语。

  1. 受保护(protected)访问修饰符

受保护访问修饰符表示对象的属性和方法只能在所属的类及其子类中访问和调用,外部代码无法直接访问。和私有访问修饰符类似,为了访问受保护的属性和方法,我们也需要使用类内部定义的公有方法。下面是一个使用受保护访问修饰符的示例:

class Person {
  protected $name;
  
  public function setName($name) {
    $this->name = $name;
  }
  
  public function sayHello() {
    echo "Hello, my name is ".$this->name;
  }
}

class Student extends Person {
  public function study() {
    echo $this->name." is studying.";
  }
}

$student = new Student();
$student->setName("John");
$student->sayHello();  // 输出 "Hello, my name is John"
$student->study();  // 输出 "John is studying."

上面的代码中,Person类的$name属性被定义为受保护的,而Student类继承了Person类。在Student类内部,我们可以直接访问和调用继承自Person类的受保护属性和方法。在外部代码中,我们通过实例化Student

    Private access modifier

    🎜Private access modifier🎜🎜🎜Private access modifier는 객체의 속성과 메서드가 자신이 속한 클래스 내에서만 액세스하고 호출할 수 있으며 외부 코드로 직접 액세스할 수 없다는 의미입니다. . 프라이빗 속성과 메서드에 접근하려면 클래스 내부에 정의된 퍼블릭 메서드를 사용해야 합니다. 다음은 private 접근 한정자를 사용하는 예입니다: 🎜rrreee🎜 위 코드에서 $name 속성은 private으로 정의되어 외부 코드에서 직접 접근할 수 없습니다. 이 속성에 값을 할당하기 위해 공개 setName($name) 메서드를 정의하고 메서드 내부의 비공개 속성에 액세스하여 값을 설정합니다. 마찬가지로 외부 코드에서 sayHello() 메서드를 사용하면 개체를 인스턴스화하고 메서드를 호출하여 인사말을 인쇄할 수 있습니다. 🎜
      🎜Protected 액세스 한정자🎜🎜🎜Protected 액세스 한정자는 객체의 속성과 메서드가 해당 객체가 속한 클래스와 하위 클래스에서만 액세스하고 호출할 수 있으며 액세스할 수 없음을 의미합니다. 외부 코드 직접 인터뷰를 통해. 비공개 액세스 수정자와 마찬가지로 보호된 속성과 메서드에 액세스하려면 클래스 내에 정의된 공개 메서드도 사용해야 합니다. 다음은 protected 액세스 수정자를 사용하는 예입니다. 🎜rrreee🎜위 코드에서 Person 클래스의 $name 속성은 protected로 정의되어 있지만 Student 클래스는 Person 클래스를 상속합니다. Student 클래스 내에서 Person 클래스에서 상속된 보호된 속성과 메서드에 직접 액세스하고 호출할 수 있습니다. 외부 코드에서 Student 개체를 인스턴스화하고 정의된 공개 메서드를 호출하여 보호된 속성과 메서드에 액세스하고 호출합니다. 🎜🎜액세스 한정자를 사용하면 객체의 액세스 권한을 더 잘 제어하고 불합리한 액세스 및 작업을 피할 수 있습니다. 실제 개발에서는 필요와 디자인 원칙에 따라 액세스 수정자를 합리적으로 선택하고 사용해야 합니다. 이 글이 여러분이 PHP의 접근 한정자를 이해하고 사용하는 데 도움이 되기를 바랍니다! 🎜

위 내용은 PHP 객체 지향 프로그래밍 소개: 액세스 한정자를 사용하여 객체 속성 및 메서드를 보호하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.