현재 위치: > 최신 기사 목록> PHP 오류를 해결하는 방법 : 개인 회원에게 액세스하는 효과적인 방법

PHP 오류를 해결하는 방법 : 개인 회원에게 액세스하는 효과적인 방법

M66 2025-08-02

PHP 오류 해결 : 개인 회원에 액세스하려는 이유

PHP 개발에서 개인으로 정의 된 클래스 멤버에 직접 액세스하려고 할 때 종종 "개인 회원에게 액세스하려고 시도"하면 오류가 발생합니다. 이 문제의 근본적인 이유는 PHP의 액세스 제어 메커니즘에 있습니다. 개인 회원은 클래스의 내부적으로 만 액세스 할 수 있지만 외부 액세스는 금지됩니다.

PHP 액세스 권한 소개

PHP는 멤버의 접근성 범위를 제어하기위한 3 가지 액세스 수정자를 제공합니다.

  • 공개 : 어디서나 접근 할 수 있습니다.
  • 보호 : 클래스 및 하위 클래스에서만 액세스 할 수 있습니다.
  • 개인 : 멤버를 정의하는 클래스 내부에서만 액세스 할 수 있습니다.

따라서 클래스 외부에서 개인 회원에게 직접 액세스하면 오류가 발생합니다.

__get () 및 __set () 메소드를 사용하여 개인 멤버에 액세스하십시오

PHP의 마법 방법 __get () 및 __set ()을 통해 개인 속성에 간접적으로 액세스 할 수 있습니다. 이 두 가지 방법을 사용하면 개인 회원 값을 수업 밖에서 안전하게 읽고 쓸 수 있습니다.

 클래스 myclass {
    개인 $ privatemember;

    공개 함수 __get ($ name) {
        if ($ name === 'privatemember') {
            $ this-> privatemember;
        }
    }

    public function __set ($ name, $ value) {
        if ($ name === 'privatemember') {
            $ this-> privatemember = $ value;
        }
    }
}

$ obj = new MyClass ();
$ obj-> privatemember = 'Hello, World!'; // 개인 멤버 설정 echo $ obj-> privatemember; // 개인 회원의 가치를 얻고 출력

위의 예에서는 __get ()을 사용하여 요청 된 속성 이름이 Privatement인지 확인하고 해당 값을 반환합니다. __set ()을 사용하여 속성을 할당합니다. 이는 개인 회원에게 직접 액세스함으로써 발생하는 오류를 피합니다.

ArrayAccess 인터페이스를 구현하고 개인 멤버에 대한 배열 액세스를 구현하십시오

배열과 같은 방식으로 개인 멤버에 액세스하려면 클래스가 PHP의 내장 ArrayAccess 인터페이스를 구현하고 유연한 액세스를 달성하기 위해 메소드를 다시 작성할 수 있습니다.

 MyClass 클래스 implements arrayaccess {
    개인 $ privatemember;

    공개 기능 offsetexists ($ offset) {
        return $ $ offset === 'privatemember';
    }

    공개 함수 오프셋 get ($ 오프셋) {
        $ this-> $ 오프셋;
    }

    공개 함수 오프셋 세트 ($ 오프셋, $ value) {
        $ this-> $ 오프셋 = $ 값;
    }

    공개 함수 offsetunset ($ offset) {
        UnSet ($ this-> $ 오프셋);
    }
}

$ obj = new MyClass ();
$ obj [ 'privatemember'] = '안녕하세요, 세계!'; // 개인 멤버 설정 echo $ obj [ 'privatemember']; // 개인 회원의 가치를 얻고 출력

ArrayAccess 인터페이스를 구현하면 배열 형 구문을 사용하여 개인 멤버를 작동하여 코드 유연성을 더욱 향상시킬 수 있습니다.

요약

PHP 오류가 "개인 멤버에 액세스하려고 시도"하면 마법 메소드 __get () 및 __set ()을 사용하거나 합법적이고 안전한 방식으로 개인 멤버에 액세스하기 위해 ArrayAccess 인터페이스를 구현하는 것이 좋습니다. 이것은 오류를 피할뿐만 아니라 코드를 더욱 확장 가능하고 유지 관리 할 수있게합니다.