PHP 객체지향 _get(), _set()을 어떻게 사용하나요? __set() 메서드는 속성 값을 설정하고 __get() 메서드는 속성 값을 가져옵니다. 이 두 메서드는 모두 프로그램에 수동으로 추가해야 합니다. 다음으로 이들 메서드의 사용을 자세히 살펴보겠습니다. 두 가지 방법.
일반적으로 클래스 속성은 항상 비공개로 정의되며 이는 현실적인 논리에 더 부합합니다. 그러나 속성에 대한 읽기 및 할당 작업은 매우 빈번하므로 PHP5에서는 속성을 가져오고 할당하기 위해 "__get()" 및 "__set()" 두 함수가 미리 정의되어 있습니다. Java의 javabean 연산과 비슷하며, 사용하는 방법도 비슷하지만 javabean처럼 각 필드에 대해 set, get 연산을 수행할 필요가 없습니다. 두 가지 매직 메서드를 추가하면 됩니다. 즉, 민간회원의 가치를 설정하고 획득하는 작업이다. PHP5는 속성 값을 설정하고 얻기 위한 특별한 메소드인 "__set()"와 "__get()"을 제공합니다. 이 두 메소드는 기본적으로 존재하지 않지만 수동으로 클래스에 추가합니다. 생성자 메서드(__construct())처럼 클래스 내부에 추가되는 경우에만 존재합니다. 다음과 같은 방법으로 이 두 메서드를 추가할 수 있습니다. 물론 개인 스타일에 따라 추가할 수도 있습니다.
1 //__set()方法用来设置私有属性 2 public function __set($name,$value){ 3 $this->$name = $value; 4 } 5 //__get()方法用来获取私有属性 6 public function __get($name){ 7 return $this->$name; 8 }
__get() 메소드: 프라이빗 멤버 속성 값을 가져오는 데 사용되는 메소드입니다. 가져오려는 멤버 속성의 이름에 매개 변수가 전달되고, 가져온 속성 값이 반환됩니다. 이 메소드를 사용할 수도 있으므로 메소드를 수동으로 호출할 필요가 없습니다. 메소드는 비공개로 설정되고 비공개 속성을 직접 얻을 때 객체에 의해 자동으로 호출됩니다. Private 속성이 캡슐화되어 있기 때문에 직접 값을 얻을 수는 없지만, 이 메소드를 클래스에 추가하면 "echo$p1->name"과 같은 문을 사용할 때 자동으로 값을 직접 얻을 수 있습니다. __get($name) 메소드를 호출하고 속성 이름을 매개변수 $name에 전달합니다. 이 메소드의 내부 실행을 통해 우리가 전달한 비공개 속성의 값이 반환됩니다. 멤버 속성이 비공개로 캡슐화되지 않은 경우 개체 자체는 이 메서드를 자동으로 호출하지 않습니다.
__set() 메서드: 이 메서드는 비공개 멤버 속성에 대한 값을 설정하는 데 사용됩니다. 두 개의 매개변수가 있습니다. 첫 번째 매개변수는 값을 설정하려는 속성의 이름이고 두 번째 매개변수는 값입니다. 속성에 대해 설정하려는 경우 반환 값이 없습니다. 이 메소드는 수동으로 호출할 필요도 없으며, private 속성 값을 직접 설정할 때 자동으로 호출됩니다. __set() 메소드가 없으면 그렇지 않습니다. 예를 들어 $this->name='zhangsan'이면 오류가 발생하지만 클래스에 __set($property_name, $value) 메서드를 추가하면 private에 값을 직접 할당할 수 있습니다. $property_name에 name과 같은 속성을 전달하고 $value에 할당할 값 "zhangsan"을 전달하여 자동으로 호출됩니다. 멤버 속성이 비공개로 캡슐화되지 않은 경우 개체 자체는 이 메서드를 자동으로 호출하지 않습니다. 잘못된 값을 전달하지 않기 위해 이 방법으로 판단할 수도 있습니다. 코드는 다음과 같습니다.
1 <?php 2 class Person 3 { 4 //下面是人的成员属性,都是封装的私有成员 5 private $name; //人的名子 6 private $sex; //人的性别 7 private $age; //人的年龄 8 //__get()方法用来获取私有属性 9 private function __get($property_name) 10 { 11 echo "在直接获取私有属性值的时候,自动调用了这个__get()方法<br>"; 12 if(isset($this->$property_name)) 13 { 14 return($this->$property_name); 15 } 16 else 17 { 18 return(NULL); 19 } 20 } 21 //__set()方法用来设置私有属性 22 private function __set($property_name, $value) 23 { 24 echo "在直接设置私有属性值的时候,自动调用了这个__set()方法为私有属性赋值<br>"; 25 $this->$property_name = $value; 26 } 27 } 28 $p1=newPerson(); 29 //直接为私有属性赋值的操作,会自动调用__set()方法进行赋值 30 $p1->name="张三"; 31 $p1->sex="男"; 32 $p1->age=20; 33 //直接获取私有属性的值,会自动调用__get()方法,返回成员属性的值 34 echo "姓名:".$p1->name."<br>"; 35 echo "性别:".$p1->sex."<br>"; 36 echo "年龄:".$p1->age."<br>"; 37 ?>
private 속성의 값을 직접 설정할 경우 __set() 메서드가 자동으로 호출되어 private 속성에 값을 할당합니다.
private 속성의 값을 직접 설정할 경우 , 이 __set() 메서드는 자동으로 호출되어 프라이빗 속성에 값을 할당합니다.
프라이빗 속성의 값을 직접 설정할 경우 __set() 메서드가 자동으로 호출되어 프라이빗 속성에 값을 할당합니다.
직접 가져오는 경우 비공개 속성 값을 얻으면 __get() 메소드가 자동으로 호출됩니다.
Name :Zhang San
비공개 속성 값을 직접 얻을 때 이 __get() 메소드가 자동으로 호출됩니다.
Gender: Male
비공개 속성 값을 직접 얻을 때 이 __get() 메소드가 자동으로 호출됩니다.
Age: 20
위 코드에서 __get() 및 __set() 메소드를 추가하지 않으면 private 멤버는 클래스 외부에서 작동할 수 없으며 위 코드는 자동으로 실행되므로 프로그램이 잘못됩니다. 캡슐화된 전용 멤버에 직접 액세스할 수 있도록 __get() 및 __set() 메서드를 호출합니다.
위 내용은 PHP에서 _get(),_set()을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!