PHP tutorial: Overloading property access | lynda.com

객체의 속성을 사용하면 액세스 할 때 트리거 할 수있는 두 가지 이벤트가 있습니다 누락 또는 범위를 벗어난 속성 : 속성을 얻거나 속성을 설정할 때

메소드 또는 함수를 사용하여 반환 할 값을 결정하는 것과 같은 일을하는 것이 유용 할 수 있습니다 그렇지 않은 속성을 설정하려고하면 일종의 fail-safe 동작을 실행합니다 있다 주소 클래스에서 마술 get 메서드는 누락 된 값을 계산하는 데 유용합니다 예를 들어, 우편 번호가 null이지만 도시와 구획이있는 경우 데이터베이스 테이블에서 값을 찾으려고 시도합니다 그러나 우편 번호가 현재 public이라면, magic get 메소드는 트리거되지 않습니다; 그러므로 우리는 우편의 범위를 바꿀 것입니다

그것을 보호하기 위해 코드를 사용하여 마법을 사용할 수 있습니다 나는 데이터베이스를 시연 할 것이다 나중에 조회 당분간 자리 표시자를 넣고 마술에 집중할 수 있습니다 행동을 취하십시오

마법 메서드는 공개되어 있으므로 범위를 지정할 필요가 없습니다 그것을 선언 할 때 주소 클래스를 열고 우편 번호 범위를 protected로 변경하십시오 범위를 시각적으로 표시하려면 속성 이름 앞에 밑줄을 붙이십시오 그런 다음 마지막 속성 선언 다음에 파일 편집을 시작합니다

자리 표시 자 함수 추가 우편 번호에 대한 데이터베이스 조회 이 기능을 노출 할 필요가 없으므로 주소 클래스 외부에서도 보호하십시오 보호 된 함수 _postal_code_guess, return 'LOOKUP' 적절한 PHP 문서 추가 : 세분화 된 우편 번호를 추측하고 도시 이름, todo는 데이터베이스 조회로 대체됩니다 이제 우편 번호 자리 표시자가 있으므로, 이제 magic get 메소드를 활용할 수 있습니다

그들은 단 하나의 논쟁만을 취합니다 문자열 형태의 속성 마법 메서드를 보호 된 메서드 위에 놓습니다 우편 번호 추측 함수 __get name

우리는 문서를 추가 할 것이다 그리고 돌아온다 우편 번호 속성에 대한이 특별한 동작에 대한 논리를 삽입하십시오 설정되지 않은 경우 우편 번호 조회 우편 번호가 없으면 우편 번호를 우편 번호로 설정하십시오

추측 우편 번호에 대한 특별 조건이 끝나면 보호 된 속성을 노출합니다 밑줄로 시작하는 것은 읽기 전용입니다 이것은 범위 제한을 둘러싼다고 기억하십시오 실수로 노출되는 것과 같은 잠재적 인 결과를 알고있는 경우에만 이렇게하십시오

내부 데이터 이 경우 모든 보호 속성을 읽기 전용으로 노출해도 아무런 해가 없습니다 보호 된 속성을 이름으로 반환하려고 시도합니다 연결된 속성을 사용하여 속성을 호출 할 수 없습니다 문자열이므로 밑줄 (_)로 시작하는 변수를 만들고 그 뒤에 이름, protected_property_name은 (=) 밑줄 (_) 다음에 이름이옵니다

속성이있는 경우 이 프로퍼티 명의 프로퍼티 명을 돌려줍니다 속성이 존재하지 않으면, PHP 오류를 발생시키고 null을 반환합니다 trigger_error 정의되지 않은 get, 다음에 오는 속성 이름, null를 돌려줍니다 지금 스크립트를 테스트했다면 실패했을 것입니다 현재 보호되고 있으므로 우편 번호를 설정하려고했습니다

그러므로, 당신은 또한 그 상황을 처리 할 수있는 마법 세트를 정의해야합니다 마법 아래에서 정의하십시오 마술 세트 방법 매직 세트 메소드에는 두 개의 인수가 있습니다 첫 번째는 속성을 문자열로 사용하고 두 번째 매개 변수는 설정할 혼합 값입니다

함수 __set name 값 name을위한 PHP 문서, value를위한 문자열을 추가하십시오 체크 박스를 추가하십시오 우편 번호 속성을 사용하고 무엇이든 그것을 조작 할 수있게합니다 이 예에서는 단 하나의 논리적 인 검사가 있기 때문에 간단한 if 문

여러 속성이있는 경우 당신이 검사하고있는 이름들, switch 구문이 더 읽기 쉽다 무엇이든 설정하도록 허용 우편 번호 우편 번호가 이름 인 경우이 이름은 값과 동일합니다 반환 속성 우편 번호가 아니므로 상황에 맞는 적절한 오류가 발생합니다

속성에 액세스 할 수 없습니다 트리거 오류 설정을 통해 정의되지 않은 또는 허용되지 않은 속성을 트리거 오류가 발생하고 이름 주소 클래스를 저장 한 다음 데모 파일을 엽니 다 마지막에 의도하지 않은 것을 제거하십시오

주소 ID 표시가 실패했습니다 그런 다음 새로운 마법 get 메서드를 테스트 해 봅시다 우편 번호 및 결과 표시 echo h2 testing magic get과 set 설정되지 않은 주소 우편 번호, 에코 주소, 디스플레이

데모 파일을 저장 한 다음 브라우저를 새로 고칩니다 그만큼 우편 번호의 첫 번째 인스턴스가 예상대로 나타나고 두 번째 인스턴스가 우편 번호에 단어 조회가 표시되지 않습니다 다음 비디오에서는 생성 된 시간을 설정할 수 있습니다 건설 마법 방법을 활용합니다