>백엔드 개발 >PHP 튜토리얼 >__get 및 __set는 실제로 PHP에서 Getter 및 Setter를 오버로드하는 것입니까?

__get 및 __set는 실제로 PHP에서 Getter 및 Setter를 오버로드하는 것입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-12 14:34:02755검색

Are __get and __set Really Just Overloading Getters and Setters in PHP?

매직 메서드: PHP에서 __get 및 __set의 진정한 목적 공개

PHP의 수수께끼 같은 __get 및 __set 매직 메서드는 개발자의 흥미를 끌었습니다. 의도된 기능에 대해 궁금해하게 만듭니다. 최근까지 이러한 방법을 사용하면 게터와 세터를 쉽게 오버로드할 수 있다고 믿어졌습니다. 그러나 현실은 다른 그림을 그립니다.

매직 메서드의 진정한 역할 이해

일반적인 가정과 달리 __get 및 __set는 주로 직접 메서드가 필요한 상황을 처리하도록 설계되었습니다. 또는 접근성 제한으로 인해 숙소 접근이 제한됩니다. 특히:

  • __set는 액세스할 수 없는 속성에 쓰려고 할 때 호출됩니다.
  • __get은 액세스할 수 없는 속성에서 데이터를 읽을 때 활용됩니다.

다음 코드를 생각해 보세요. snippet:

class foo {
    public $bar;
    public function __get($name) {
        echo "Get:$name";
        return $this->$name;
    }

    public function __set($name, $value) {
        echo "Set:$name to $value";
        $this->$name = $value;
    }
}

$foo = new foo();
echo $foo->bar; // Fails
$foo->bar = 'test'; // Fails

이 경우 $bar 속성은 공개적으로 액세스할 수 있으므로 __get 및 __set 메서드는 호출되지 않습니다. PHP 매뉴얼에는 다음과 같이 명시되어 있습니다. "매직 메소드는 getter 및 setter를 대체하지 않습니다. 이를 통해 오류가 발생할 수 있는 메소드 호출이나 속성 액세스를 처리할 수 있을 뿐입니다."

성능에 미치는 영향

매직 메서드에는 성능 비용이 따른다는 점에 유의하는 것이 중요합니다. 이를 호출하는 것은 적절한 getter, setter 또는 직접 메서드 호출을 사용하는 것보다 눈에 띄게 느립니다. 따라서 접근성 문제를 처리해야 하는 예외적인 상황을 위해 예약해야 합니다.

결론

__get 및 __set은 getter 및 setter 오버로드에 대한 편리한 솔루션처럼 보일 수 있습니다. , 그들의 진정한 목적은 자산 접근 제한을 관리하는 것입니다. 효과적인 PHP 코드 개발을 위해서는 정확한 역할을 이해하는 것이 중요합니다. 이러한 지식을 수용함으로써 불필요한 성능 저하를 방지하고 코드 안정성을 보장할 수 있습니다.

위 내용은 __get 및 __set는 실제로 PHP에서 Getter 및 Setter를 오버로드하는 것입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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