내 클래스의 정의 된 필드에 php의 __get () 및 __set ()을 어떻게 사용합니까?

StackOverflow https://stackoverflow.com/questions/1180935

문제

나는 잘 읽었습니다 과부하시 PHP 사양, 그리고 대부분의 예제는 단순히 사용자 정의 필드 (stdClass와 유사)를 정의하는 것을 허용하는 것으로 보입니다.

그러나 수업에서 정의 된 개인 분야는 어떻습니까? 이것들은 어떻게 검색/할당되어야합니까? 가능한 값을 켜고 특정 값에 따라 행동 할 수 있습니다.

class A
{
    private $name;
    private $age;

    public function __get( $var )
    {
        switch ( $var )
        {
            case 'name':
                return $this->name;
                break;
            case 'age':
                return $this->age+10; // just to do something different ;)
                break;
            default:
                break;
        }
    }
}

이것이 최선의 방법입니까, 아니면 일반적으로 인정되는 모범 사례가 있습니까? (클래스 내부의 클래스 변수를 루프 할 수 있는지는 모르겠지만 대부분의 상황에서는 모든 것을 반환하고 싶지 않기 때문에 적절하지 않습니다.)

도움이 되었습니까?

해결책

이로 인해 효과적으로 공개적으로 공개되며 일반적으로 공개 속성을 사용하는 것보다 아무것도 얻지 못합니다 (그러나 성과 페널티를 지불하고 더 많은 코드, 위험 버그를 작성해야합니다).

공공 속성을 사용하는 기존 코드가 있고 갑자기 getter/setter가 필요한 경우에만 사용하십시오 (예 : 예 : age).

속성을 읽거나 작성할 때 일부 코드를 실행 해야하는 경우 (예 : 데이터베이스에서 읽기 전용 또는 게으르게 가져 오는 경우) 일반적인 getters/setters를 사용해야합니다 (getAge()/setAge()).

다른 팁

나는 광범위한 사용을한다 __get() 그리고 __set() 그리고 내 속성을 선언했습니다 public. 나는 두 세계의 최고를 원했기 때문에 IDE가 클래스 인스턴스의 이름을 입력 할 때 나에게 공개 속성을 나열 할 수있었습니다. 속성이 공개적이고 클래스 외부에 보이지만 PHP 인터셉터 방법을 어떻게 작동 시켰습니까?

unset () 속성 원해요 __get() 그리고 __set() 수업 시간에 사용됩니다 __construct().

이 방법을 알아 내면 몇 번의 좌절감이 필요했습니다 :-)

나는 많은 사람들이 그들을 사용하는 것을 보지 못하지만 여기에 내가 생각하는 것이 있습니다.

개인 변수를 검색하려면 외부에서 액세스 할 수있는 정의 된 변수 목록을 제공하려고합니다. 그런 다음 요청 된 변수가 해당 배열에 있는지 확인하십시오. 그렇다면 변경/받을 수 있습니다. 그렇지 않은 경우 오류 또는 반환 NULL.

솔직히, 이에 대한 구현은 실제로 사례 별입니다. 모든 정보를 단일 배열로 저장 한 사용자 클래스가있는 경우 $ user-> name을 $ user-> account [ 'name']에서 가져올 수 있습니다.

또한 더 많은 사례별로 비밀번호를 해싱과 같은 값을 제공하기 전에 수정을 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top