ホームページ  >  記事  >  バックエンド開発  >  phpでのマジックメソッドをまとめて整理する

phpでのマジックメソッドをまとめて整理する

WBOY
WBOY転載
2022-04-15 12:50:225287ブラウズ

この記事では、PHP に関する関連知識を提供し、主にマジック メソッドに関する関連事項を紹介し、__construct 構築メソッド、__destruct デストラクター メソッド、および __clone クローン作成メソッドについてまとめています。 。

phpでのマジックメソッドをまとめて整理する

推奨学習: 「PHP ビデオ チュートリアル

php のマジック メソッドの詳細な説明、in php 非常に奇妙なメソッドのようなものがあります。つまり、特定の条件が満たされる限り、それが自動的に実行されます。これは、php の魔法のメソッドです。

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 静的呼び出しメソッド

呼び出される静的メソッドが実行されるとき存在しない場合、または権限が不十分な場合は、自動的に呼び出されます。 ##6. __debugInfo 出力メソッド

  • このメソッドは、var_dump() クラス オブジェクトが呼び出されたときに使用されます
  • このメソッドが定義されていない場合、var_dump() は出力します。すべてのクラス属性
<?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方法

7. メンバー属性を取得する__getメソッド

  • これを通じて、オブジェクトの外部でプライベートメンバープロパティを取得できます
  • <?php
    class autofelix 
    {
        public function __debugInfo()
        {
            echo &#39;你看不到我任何信息的~&#39;;
        }
    }
    
    var_dump(new autofelix());
    
    //即可输出:你看不到我任何信息的~
8. __isset メソッド

ペアにアクセスできない場合 isset() または empty() を呼び出すときに属性が自動的に呼び出されます
  • <?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
    9. __set メソッド

    は、属性が割り当てられたときに未定義がトリガーされます
    • <?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
    10. __invoke メソッド

    オブジェクト自体を関数として直接使用することはできません
    • If このメソッドは、オブジェクトが関数として呼び出されたときにトリガーされます
    <?php
    class autofelix 
    {
        public function __set($name, $value)
        {
            echo &#39;你想给&#39; . $name . &#39;赋值&#39; . $value;
        }
    }
    
    $a = new autofelix();
    $a->name = 'autofelix';
    
    //结果: 你想给name赋值autofelix;

    #11. __sleep メソッド

    ##serialize() がクラス外で呼び出された場合は自動的に呼び出されます
    • <?php
      class autofelix 
      {
          public function __invoke()
          {
              echo &#39;你还想调用我?&#39;;
          }
      }
      
      $a = new autofelix();
      
      //对象直接当函数调用
      $a();
      
      //结果: 你还想调用我?
    • 12. __toString メソッド

    クラスが文字列として扱われる場合に返されるべきもの

    ここでは文字列型を返さなければなりません、そうしないと致命的なエラーが発生します。報告された
    • <?php
      class autofelix 
      {
          public function __sleep()
          {
              echo &#39;弄啥嘞~&#39;;
          }
      }
      
      $a = new autofelix();
      
      serialize($a);
      
      //结果: 弄啥嘞~
    13. __unset メソッド

    アクセスできない場合、この属性は unset() が呼び出されたときに自動的に呼び出されます
    • <?php
      class autofelix 
      {
          public function __toString()
          {
              return &#39;我是你得不到的对象...&#39;;
          }
      }
      
      $a = new autofelix();
      echo $a;
      
      //结果: 我是你得不到的对象...
    • 14. __wakeup メソッド

    は、unserialize() メソッドが実行されると自動的に呼び出されます。 Call

    <?php
    class autofelix 
    {
        private $name = &#39;autofelix&#39;;
    
        public function __unset($name)
        {
            echo &#39;想删我? 你也配?&#39;;
        }
    }
    
    $a = new autofelix();
    unset($a->name);
    
    //结果: 想删我? 你也配?
      推奨される学習: "
    • PHP ビデオ チュートリアル
    • "

以上がphpでのマジックメソッドをまとめて整理するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。