>  기사  >  백엔드 개발  >  PHP의 __get 및 __set 사용 예에 ​​대한 자세한 설명

PHP의 __get 및 __set 사용 예에 ​​대한 자세한 설명

WBOY
WBOY원래의
2016-08-08 09:19:27772검색
PHP 객체 지향 _get(), _set() 사용법
일반적으로 클래스의 속성을 항상 비공개로 정의하는 것이 보다 현실적인 논리입니다. 그러나 속성을 읽고 할당하는 작업은 매우 빈번하므로 PHP5에서는 속성을 가져오고 할당하기 위해 "__get()" 및 "__set()" 두 함수가 미리 정의되어 있습니다. Java의 javabean 연산과 비슷하며, 사용하는 방법도 비슷하지만 javabean처럼 각 필드에 대해 set, get 연산을 수행할 필요가 없습니다. 두 가지 매직 메서드를 추가하면 됩니다. 즉, 민간회원의 가치를 설정하고 획득하는 작업이다. PHP5는 속성 값을 설정하고 얻기 위한 특별한 메소드인 "__set()" 및 "__get()"을 제공합니다. 이 두 메소드는 기본적으로 존재하지 않지만 수동으로 클래스에 추가합니다. , 생성자 메서드(__construct())와 마찬가지로 클래스 내부에 추가되는 경우에만 존재합니다. 이 두 메서드는 다음과 같은 방법으로 추가할 수 있으며, 물론 개인 스타일에 따라 추가할 수도 있습니다. >

코드 복사코드는 다음과 같습니다.

//__set() 메소드를 사용하여 개인 속성을 설정합니다
public function __set($name, $value){
$this->$name = $value
}
//__get() 메서드는 개인 속성을 얻는 데 사용됩니다.
공용 함수 __get($name){
return $this->$name
}


__get() 메서드: 이 메서드는 비공개 멤버 속성 값을 가져오는 데 사용됩니다. 매개변수가 전달됩니다. 획득한 멤버 속성의 이름은 획득한 속성 값을 반환합니다. 이 메서드를 개인 메서드로 만들 수도 있으므로 이 메서드를 수동으로 호출할 필요가 없습니다. 개인 속성을 직접 얻을 때 객체에 의해 자동으로 호출됩니다. Private 속성이 캡슐화되어 있기 때문에 직접 값을 얻을 수는 없지만, 이 메소드를 클래스에 추가하면 "echo$p1->name"과 같은 문을 사용할 때 자동으로 값을 직접 얻을 수 있습니다. __get($name) 메소드를 호출하고 속성 이름을 매개변수 $name에 전달합니다. 이 메소드의 내부 실행을 통해 전달한 비공개 속성의 값이 반환됩니다. 멤버 속성이 비공개로 캡슐화되지 않은 경우 개체 자체는 이 메서드를 자동으로 호출하지 않습니다.
__set() 메소드: 이 메소드는 비공개 멤버 속성에 대한 값을 설정하는 데 사용됩니다. 첫 번째 매개변수는 값을 설정하려는 속성의 이름입니다. 두 번째 매개변수는 속성에 설정할 값입니다. 반환 값이 없습니다. 이 메서드는 수동으로 호출할 필요도 없습니다. 비공개 속성 값을 직접 설정하면 자동으로 호출됩니다.
__set() 메서드 없이는 허용되지 않습니다(예: $this->name='zhangsan'). 그러면 오류가 발생하지만 직접 할당할 때 클래스에 __set($property_name, $value) 메서드를 추가하면 private 속성에 값을 할당하면 자동으로 호출되어 name 등의 속성을 $property_name에 전달하고 "zhangsan" 값을 $value에 전달하면 할당 목적이 달성됩니다. . 멤버 속성이 비공개로 캡슐화되지 않은 경우 개체 자체는 이 메서드를 자동으로 호출하지 않습니다. 잘못된 값을 전달하지 않기 위해 이 방법으로 판단할 수도 있습니다. 코드는 다음과 같습니다.

코드를 복사하세요코드는 다음과 같습니다.

class Person
{
//다음은 개인의 구성원 속성으로, 모두 캡슐화된 개인 구성원입니다.
private $name; //개인 이름
private $sex; 개인의 성별
private $age ; //개인의 나이
//__get() 메서드는 개인 속성을 얻는 데 사용됩니다.
개인 함수 __get($property_name)
{
echo " 개인 속성 값을 직접 얻을 때 자동으로 호출됩니다. 이 __get() 메서드를 얻었습니다
";
if(isset($this->$property_name))
{
return($this-> ;$property_name);
}
else
{
return(NULL);
}
}
//__set() 메소드는 개인 속성을 설정하는 데 사용됩니다
private function __set($property_name, $ value)
{
echo "비공개 속성의 값을 직접 설정할 때 이 __set() 메서드는 자동으로 호출되어 비공개 속성에 값을 할당합니다
" ;
$this->$property_name = $value;
}
}
$p1=newPerson()
//프라이빗 속성에 직접 값을 할당하는 경우 __set () 메소드는
$p1- >name="Zhang San"
$p1->sex="Male"
$p1->age=20;
//개인 속성 값을 직접 가져오면 자동으로 __get() 메서드가 호출되고 멤버 속성 값을 반환합니다.
echo "Name:".$p1->name."echo "Gender:".$p1->sex. "
";
echo "Age:".$p1->age."
";
?>


프로그램 실행 결과:
private 속성의 값을 직접 설정할 때 __set() 메소드가 자동으로 호출되어 private 속성에 값을 할당합니다. attribute
private 속성의 값을 직접 설정할 때 이 __set() 메서드가 자동으로 호출되어 private 속성에 값을 할당합니다.
개인 속성 값을 가져오면 이 메서드가 자동으로 호출됩니다.
개인 속성 값을 직접 가져올 때 __get() 메서드가 자동으로 호출됩니다. 🎜>
이름: Zhang San
private 속성 값을 직접 가져올 때 __get() 메서드가 자동으로 호출됩니다.
성별: 남자
직접 가져오는 경우 private 속성 값을 설정하면 __get() 메서드가 자동으로 호출됩니다.
Age: 20

위 코드에 __get() 및 __set() 메서드를 추가하지 않으면 private 멤버는 클래스 외부에서 작동할 수 없기 때문에 프로그램이 잘못되고, 위 코드는 자동으로 호출하여 캡슐화된 private 멤버에 직접 액세스할 수 있도록 도와줍니다. __get() 및 __set() 메서드.

이 기사의 출처: http://www.jb51.net/article/37900.htm

위 내용은 관련 내용을 포함하여 PHP에서 __get 및 __set의 자세한 사용 예를 소개하고 있으며, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.