>백엔드 개발 >PHP 튜토리얼 >PHP 매직 메소드: __get __set

PHP 매직 메소드: __get __set

WBOY
WBOY원래의
2016-08-08 09:33:081193검색

php5 이상 버전부터 클래스는 매직 메소드를 사용할 수 있습니다. PHP에서는 두 개의 밑줄(__)로 시작하는 메소드는 매직 메소드로 예약되어 있으므로 기존 매직 메소드를 오버로드하지 않는 한 함수 이름은 __로 시작하지 않는 것이 좋습니다.

PHP의 기존 매직 메소드에는 __construct, __destruct, __call, __get, __set, __isset, __unset, __sleep, __wakeup, __toString, __set_state 및 __clone이 포함됩니다.

이 섹션에서는 __get, __set: 사용에 대해 설명합니다.

__get()  - 접근할 수 없는 속성의 값을 읽을 때 __get()이 호출됩니다

__set()  - 접근할 수 없는 속성에 값을 할당할 때 __set()이 호출됩니다

<?php

/**
 * 清晰的认识__get() __set()
 */
class Example {
    
    //公有的属性
    public $public = 'pub' ;
    //受保护的 - 子类中该属性可用
    protected $protected = 'pro';
    //私有的 - 只能此类使用此属性
    private $private = 'pri';
    
    //当访问对象中的属性不存在或者非公有属性的时候自动加载__get()方法
    public function __get($name){
        return '调用__get()方法:'.$name;
    }
    
    //当给对象的一个属性赋值的时候如果该属性不存在或者是非公有属性则自动加载__set()方法
    public function __set($name,$value){
        echo "\nname:".$name.',value:'.$value."\n";
    }
}

$example = new Example;
echo '<pre class="brush:php;toolbar:false">';
echo $example->public."\n";
echo $example->protected."\n";
echo $example->private."\n";
echo $example->other."\n";
echo '<hr>';
$example->public = 'lic';   //这个赋值成功所有没有显示
$example->protected = 'tec';
$example->private = 'vat';
$example->other = 'er';
echo '<br/>';
echo '打印 public 属性:'.$example->public;
 

결과는 다음과 같습니다.

<span>pub
调用__get()方法:</span><span>protected</span><span> 调用__get()方法:</span><span>private</span><span> 调用__get()方法:other

name:</span><span>protected</span>,value:<span>tec

name:</span><span>private</span>,value:<span>vat

name:other</span>,value:<span>er

打印 </span><span>public</span> 属性:lic

위 내용은 PHP 매직 메소드의 내용을 포함하여 __get __set을 소개하고 있으며, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

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