PHP에서 __get 메소드의 역할: 비공개 멤버 속성 값을 얻는 데 사용됩니다. __get 메서드는 수동으로 호출할 필요가 없으므로 이 메서드를 개인 속성을 얻을 때 객체가 자동으로 호출하는 개인 메서드로 만들 수 있습니다.
일반적으로 말해서, 클래스의 속성은 항상 비공개로 정의하세요. 이는 현실적인 논리에 더 부합합니다. 그러나 속성을 읽고 할당하는 작업은 매우 빈번하므로 PHP5에서는 속성을 가져오고 할당하기 위해 "__get()" 및 "__set()" 두 함수가 미리 정의되어 있습니다. Java의 javabean 연산과 비슷하며, 사용하는 방법도 비슷하지만 javabean처럼 각 필드에 대해 set, get 연산을 수행할 필요가 없습니다. 두 가지 매직 메서드를 추가하면 됩니다. 즉, 민간회원의 가치를 설정하고 획득하는 작업이다.
(권장 튜토리얼: php 비디오 튜토리얼)
PHP5에서는 "__set()" 및 "__get()" 속성에 대한 값을 설정하고 값을 가져오는 특별한 메소드를 제공합니다. 이 두 가지 메소드는 기본적으로 존재하지 않지만 생성자 메소드(__construct())와 마찬가지로 클래스에 추가하는 경우에만 존재합니다. 물론 다음과 같은 방법으로 개인 스타일에 따라 추가할 수 있습니다.
//__set() 方法用来设置私有属性 public function __set($name,$value){ $this->$name = $value; } //__get() 方法用来获取私有属性 public function __get($name){ return $this->$name; }
__get() 메서드: 이 메서드는 개인 멤버 속성 값을 가져오는 데 사용됩니다. 이 메소드는 수동으로 호출할 필요가 없으므로 이 메소드를 private 메소드로 만들 수도 있으며, 이는 private 속성을 직접 호출할 때 객체에서 자동으로 호출됩니다. 획득.
private 속성이 캡슐화되어 있기 때문에 직접 값을 얻을 수는 없지만, 이 메소드를 클래스에 추가하면 "echo$p1->name"과 같은 문을 사용할 때 값을 직접 얻을 수 있습니다. __get($name) 메소드가 자동으로 호출되어 속성 이름을 매개변수 $name에 전달합니다. 이 메소드의 내부 실행을 통해 우리가 전달한 비공개 속성의 값이 반환됩니다. 멤버 속성이 비공개로 캡슐화되지 않은 경우 개체 자체는 이 메서드를 자동으로 호출하지 않습니다.
__set() 메서드: 이 메서드는 비공개 멤버 속성에 대한 값을 설정하는 데 사용됩니다. 두 개의 매개변수가 있습니다. 첫 번째 매개변수는 값을 설정하려는 속성의 이름이고 두 번째 매개변수는 값입니다. 속성에 대해 설정하려고 합니다. 반환 값이 없습니다. 또한 이 메서드는 수동으로 호출할 필요가 없으며 private으로 설정할 수도 있으며 private 속성 값을 직접 설정하면 자동으로 호출됩니다.
동일한 개인 속성이 캡슐화되었습니다. __set() 메서드가 없으면 허용되지 않습니다. 예: $this->name= ' zhangsan ' , 오류가 발생하지만 추가하면 됩니다. 클래스 프라이빗 속성에 직접 값을 할당할 때 __set($property_name, $value) 메서드가 자동으로 호출됩니다. $property_name에 name과 같은 속성을 전달하고, $value에 할당할 "zhangsan" 값을 전달합니다. 이 메소드를 실행하면 할당 목적이 달성됩니다.
구성원 속성이 비공개로 캡슐화되지 않은 경우 개체 자체는 이 메서드를 자동으로 호출하지 않습니다. 잘못된 값을 전달하지 않기 위해 이 방법으로 판단할 수도 있습니다.
코드는 다음과 같습니다.
<?php class Person { // 下面是人的成员属性,都是封装的私有成员 private $ name ; // 人的名子 private $ sex ; // 人的性别 private $ age ; // 人的年龄 //__get() 方法用来获取私有属性 private function __get( $ property_name ) { echo " 在直接获取私有属性值的时候,自动调用了这个 __get() 方法 <br>" ; if ( isset ( $ this -> $ property_name )) { return ( $ this -> $ property_name ); } else { return ( NULL ); } } //__set() 方法用来设置私有属性 private function __set( $ property_name , $ value ) { echo " 在直接设置私有属性值的时候,自动调用了这个 __set() 方法为私有属性赋值 <br>" ; $ this -> $ property_name = $ value ; } } $ p1 = new Person(); // 直接为私有属性赋值的操作,会自动调用 __set() 方法进行赋值 $ p1 ->name= " 张三 " ; $ p1 ->sex= " 男 " ; $ p1 ->age= 20 ; // 直接获取私有属性的值,会自动调用 __get() 方法,返回成员属性的值 echo " 姓名: " . $ p1 ->name. "<br>" ; echo " 性别: " . $ p1 ->sex. "<br>" ; echo " 年龄: " . $ p1 ->age. "<br>" ; ?>
실행 결과:
在直接设置私有属性值的时候,自动调用了这个 __set() 方法为私有属性赋值 在直接设置私有属性值的时候,自动调用了这个 __set() 方法为私有属性赋值 在直接设置私有属性值的时候,自动调用了这个 __set() 方法为私有属性赋值 在直接获取私有属性值的时候,自动调用了这个 __get() 方法 姓名:张三 在直接获取私有属性值的时候,自动调用了这个 __get() 方法 性别:男 在直接获取私有属性值的时候,自动调用了这个 __get() 方法 年龄: 20
위 코드에서 __get() 및 __set() 메서드를 추가하지 않으면 클래스 외부에서는 private 멤버를 조작할 수 없기 때문에 프로그램에서 오류가 발생하며, 위 코드는 __get() 및 __set() 메서드를 자동으로 호출하여 캡슐화된 전용 멤버에 직접 액세스하는 데 도움이 됩니다.
관련 권장 사항: php training
위 내용은 PHP에서 __get 메소드를 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!