>백엔드 개발 >PHP 튜토리얼 >PHP의 매직 메소드 요약 및 구성

PHP의 매직 메소드 요약 및 구성

WBOY
WBOY앞으로
2022-04-15 12:50:225317검색

이 글은 PHP에 대한 관련 지식을 제공합니다. 주로 매직 메소드에 대한 관련 문제를 소개하고 __construct 생성 방법, __destruct 소멸자 방법, __clone 복제 방법 등을 요약합니다. 모든 사람에게 도움이 되기를 바랍니다.

PHP의 매직 메소드 요약 및 구성

추천 학습: "PHP Video Tutorial"

PHP의 매직 메소드에 대한 자세한 설명, PHP에는 일종의 메소드가 있는데, 이는 매우 이상합니다. 즉, 특정 조건이 충족되는 한 충족되면 자체적으로 실행됩니다. 즉, PHP의 Magic 메소드입니다.

1. __construct 생성 메소드

  • 클래스가 인스턴스화될 때 호출됩니다.
  • 간단히 말하면 새 클래스가 생성되면 다음과 같습니다. 메소드가 자동으로 실행됩니다
<?php
class autofelix 
{
    public function __construct()
    {
        echo &#39;我是类autofelix&#39;;
    }
}

new autofelix();

//即可输出:我是类autofelix

2. __destruct 소멸자 메소드

  • 클래스가 파괴될 때 자동으로 트리거됩니다.
  • unset 메소드를 사용하여 이 메소드를 트리거할 수 있습니다.
<?php
class autofelix 
{
    public function __destruct()
    {
        echo &#39;我准备销毁你了&#39;;
    }
}

$a = new autofelix();
unset($a);

//即可输出:我准备销毁你了

3. __clone 복제 메소드

  • 클래스가 복제되면 자동으로 호출됩니다. 호출
<?php
class autofelix 
{
    public function __clone()
    {
        echo &#39;我克隆了你&#39;;
    }
}

$a = new autofelix();
clone $a;

//即可输出:我克隆了你

4. __call 비정적 호출 메서드

  • 호출할 메서드가 없거나 권한이 부족할 때 자동으로 호출됩니다
  • 의 경우 예를 들어, 클래스 외부에서 클래스 내부의 수정된 비공개 메서드를 호출합니다
<?php
class autofelix 
{
    private function say() 
    {
        echo &#39;hello, 我是autofelix&#39;;
    }

    public function __call($name, $arguments)
    {
        echo &#39;你无权调用&#39; . $name . &#39;方法&#39;;
        die;
    }
}

$a = new autofelix();
$a->say(); //按理说应该报错

//即可输出:你无权调用say方法

5.__callStatic 정적 호출 메서드

  • 호출하려는 정적 메서드가 존재하지 않거나 권한이 부족할 때 자동으로 호출됩니다
  • 예를 들어 클래스 외부에서 클래스 내부의 수정된 비공개 정적 메소드를 호출합니다
<?php
class autofelix 
{
    private static function say() 
    {
        echo &#39;hello, 我是autofelix&#39;;
    }

    public function __callStatic($name, $arguments)
    {
        echo &#39;你无权调用&#39; . $name . &#39;方法&#39;;
        die;
    }
}

$a = new autofelix();
$a::say(); //按理说应该报错

//即可输出:你无权调用say方法

6, __debugInfo 인쇄 메소드

  • 이 메소드는 var_dump() 클래스 객체가 호출될 때 호출됩니다.
  • 이 메소드가 그렇지 않으면 정의되면 var_dump()는 모든 클래스 속성을 인쇄합니다
<?php
class autofelix 
{
    public function __debugInfo()
    {
        echo &#39;你看不到我任何信息的~&#39;;
    }
}

var_dump(new autofelix());

//即可输出:你看不到我任何信息的~

7. __get은 멤버 속성을 가져옵니다. 메서드

  • 이를 통해 객체 외부의 비공개 멤버 속성을 얻을 수 있습니다.
<?php
class autofelix 
{
    private $name = &#39;autofelix&#39;;

    public function __get($name)
    {
        if(in_array($name, [&#39;name&#39;, &#39;age&#39;])) {
           echo $this->name;
        } else {
            echo '不是什么东西都能访问的~';
        }
    }
}

$a = new autofelix();
$a->name;

//即可输出:autofelix

8. __isset 메서드

  • 는 액세스할 수 없는 속성에 isset() 또는 empty()가 호출되면 자동으로 호출됩니다.
<?php
class autofelix 
{
    private $name = &#39;autofelix&#39;;

    public function __isset($name)
    {
        if(in_array($name, [&#39;name&#39;, &#39;age&#39;])) {
           echo $this->name;
        } else {
            echo '不是什么东西都能访问的~';
        }
    }
}

$a = new autofelix();
isset($a->name);

//结果: autofelix

9. __set 메서드

  • 는 정의되지 않은 속성
<?php
class autofelix 
{
    public function __set($name, $value)
    {
        echo &#39;你想给&#39; . $name . &#39;赋值&#39; . $value;
    }
}

$a = new autofelix();
$a->name = 'autofelix';

//结果: 你想给name赋值autofelix;

10에 값을 할당할 때 트리거됩니다. __invoke 메소드

  • 객체 자체를 함수로 직접 사용할 수 없습니다
  • 객체를 다음과 같이 취급하면 함수 호출이 이 메소드를 트리거합니다
<?php
class autofelix 
{
    public function __invoke()
    {
        echo &#39;你还想调用我?&#39;;
    }
}

$a = new autofelix();

//对象直接当函数调用
$a();

//结果: 你还想调用我?

11. __sleep 메소드

  • 는 직렬화 시 자동으로 호출됩니다. ()는 클래스 외부에서 호출됩니다.
<?php
class autofelix 
{
    public function __sleep()
    {
        echo &#39;弄啥嘞~&#39;;
    }
}

$a = new autofelix();

serialize($a);

//结果: 弄啥嘞~

12. __toString 메소드

  • 클래스를 문자열로 처리할 때 무엇을 반환해야 할까요? 여기서는 문자열 형식을 반환해야 합니다. 그렇지 않으면 치명적인 오류가 보고됩니다. 자동으로 호출됩니다
  • <?php
    class autofelix 
    {
        public function __toString()
        {
            return &#39;我是你得不到的对象...&#39;;
        }
    }
    
    $a = new autofelix();
    echo $a;
    
    //结果: 我是你得不到的对象...
Fourteen, __wakeup 메소드

는 unserialize() 메소드가 실행될 때 자동으로 호출됩니다
  • <?php
    class autofelix 
    {
        private $name = &#39;autofelix&#39;;
    
        public function __unset($name)
        {
            echo &#39;想删我? 你也配?&#39;;
        }
    }
    
    $a = new autofelix();
    unset($a->name);
    
    //结果: 想删我? 你也配?
    추천 학습: "PHP 비디오 튜토리얼

    "

    위 내용은 PHP의 매직 메소드 요약 및 구성의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제