> 백엔드 개발 > PHP 문제 > PHP 매직 메소드 __get() 및 __set()을 사용하는 방법

PHP 매직 메소드 __get() 및 __set()을 사용하는 방법

青灯夜游
풀어 주다: 2023-03-11 09:54:01
원래의
1986명이 탐색했습니다.

"__set()"은 정의되지 않은 속성에 값을 할당할 때 자동으로 호출됩니다. 구문은 "public function __set(key,value){}"입니다. 정의되지 않은 속성이 호출되면 "__get()"이 호출됩니다. 구문은 "공용 함수 __get(이름){}"입니다.

PHP 매직 메소드 __get() 및 __set()을 사용하는 방법

이 튜토리얼의 운영 환경: Windows 7 시스템, PHP 버전 7.1, DELL G3 컴퓨터

PHP의 Magic 메소드는 일반적으로 __(두 개의 밑줄)로 시작하며 명시적으로 호출할 필요는 없지만 자동으로 호출됩니다. 특정 조건에서 호출됩니다.

Magic method Function
__set() 정의되지 않은 속성에 값을 할당할 때 자동 호출
__get() 정의되지 않은 속성이 호출되면 자동으로 호출

1. __set() 메서드

현재 환경에서 정의되지 않거나 보이지 않는 클래스 속성에 값을 할당하면 __set() 메서드가 자동으로 호출됩니다. 이 메소드를 정의하는 구문 형식은 다음과 같습니다.

public function __set($key, $value){
    ... ... ;
}
로그인 후 복사

그 중 $key 매개변수는 연산할 변수의 이름이고, $value는 $key 변수의 값입니다.

【예제】 다음은 __set() 메소드의 사용법을 보여주기 위해 간단한 예시를 사용합니다.

<?php
    class Website{
        public $name;
        private $url;
        public function __set($key, $value){
            echo &#39;为“&#39;.$key.&#39;”赋值“&#39;.$value.&#39;”失败!<br>&#39;;
        }
    }
    $object          = new Website();
    $object -> name  = &#39;php中文网&#39;;
    $object -> url   = &#39;https://www.php.cn/&#39;;
    $object -> title = &#39;PHP教程&#39;;
?>
로그인 후 복사

실행 결과는 다음과 같습니다.

为“url”赋值“https://www.php.cn/”失败!
为“title”赋值“PHP教程”失败!
로그인 후 복사

__set() 메서드의 특성을 이용하면 __set() 메서드를 사용하여 private 키워드로 수정된 클래스의 속성을 할당하거나 수정할 수 있습니다.

<?php
    class Website{
        public $name;
        private $url = &#39;&#39;;
        public function __set($key, $value){
            if(isset($this->$key)){
                $this -> $key = $value;
            }else{
                echo &#39;为“&#39;.$key.&#39;”赋值“&#39;.$value.&#39;”失败!<br>&#39;;
            }
        }
        public function getUrl(){
            echo $this -> url;
        }
    }
    $object          = new Website();
    $object -> name  = &#39;php中文网&#39;;
    $object -> url   = &#39;https://www.php.cn/&#39;;
    $object -> title = &#39;PHP教程&#39;;
    $object -> getUrl();
?>
로그인 후 복사

실행 결과는 다음과 같습니다.

为“title”赋值“PHP教程”失败!
https://www.php.cn/
로그인 후 복사

2.__get() 메소드

현재 환경에서 정의되지 않거나 보이지 않는 클래스 속성을 호출하거나 얻을 때 __get() 메소드가 자동으로 호출됩니다. . 이 메소드를 정의하는 구문 형식은 다음과 같습니다.

public function __get($name){
    ... ... ;
}
로그인 후 복사

매개변수 $name은 연산할 변수의 이름입니다.

【예제】 다음은 __get() 메서드의 사용을 보여주기 위해 간단한 예를 사용합니다.

<?php
    class Website{
        public $url = &#39;https://www.php.cn/&#39;;
        private $name = &#39;php中文网&#39;;
        public function __get($name){
            echo &#39;获取:“&#39;.$name.&#39;”失败!&#39;;
        }
    }
    $object = new Website();
    echo $object -> url.&#39;<br>&#39;;
    echo $object -> name.&#39;<br>&#39;;
    echo $object -> title.&#39;<br>&#39;;
?>
로그인 후 복사

실행 결과는 다음과 같습니다.

https://www.php.cn/
获取:“name”失败!
获取:“title”失败!
로그인 후 복사

추천 학습: "PHP Video Tutorial"

위 내용은 PHP 매직 메소드 __get() 및 __set()을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿