ホームページ > バックエンド開発 > PHPチュートリアル > phpでのマジックメソッドをまとめて整理する

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

WBOY
リリース: 2023-04-10 22:56:02
転載
5302 人が閲覧しました

この記事では、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 サイトの他の関連記事を参照してください。

関連ラベル:
php
ソース:csdn.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート