ホームページ バックエンド開発 PHPチュートリアル PHP の魔法のメソッドを 5 分で理解できます (詳細な例)

PHP の魔法のメソッドを 5 分で理解できます (詳細な例)

Oct 25, 2021 pm 05:53 PM
php 魔法の方法

前回の記事では、「PHP での clone キーワードと __clone() メソッドの使用法 (詳細な例)」をご紹介し、PHP キーワードと __clone() での clone について詳しく説明しました。メソッドについては、この記事で引き続き PHP の魔法のメソッドをお届けします。お役に立てば幸いです。

PHP の魔法のメソッドを 5 分で理解できます (詳細な例)

前回の記事で、__clone() メソッドを紹介したときに、これは一種の魔法のメソッドであると述べました。 「コンストラクタとデストラクタ」でも挙げたコンストラクタとデストラクタは、コンストラクタ、デストラクタとも呼ばれ、マジックメソッドの一種でもあります。では、魔法のメソッドとは何でしょうか?一般的に使用される方法は何ですか?どのように使用されますか?次に見てみましょう。

PHP マジック メソッド


PHP オブジェクト指向プログラミングでは、PHP に一連のマジック メソッドがあります。これらのマジック メソッドについては、次のメソッドを参照してください。前に学習した

__clone\__construct\__destruct 共通点が 1 つ見つかります。それは、すべて 2 つのアンダースコア __ で始まるということです。そしてそれらはすべて、特定の条件下で自動的に呼び出されます。

それでは、よく使われるいくつかのマジックメソッドとその使用方法を例を挙げて見てみましょう。


#__set()<strong><span style="font-size: 18px;"></span></strong>メソッド ##__set()

メソッドは、現在の環境で未定義または非表示のクラス属性に値を割り当てるために使用されます。すべてのマジック メソッドは特定の条件下で自動的に呼び出され、現在の環境に使用されることに注意してください。環境内での未定義または非表示のクラス属性の割り当ては、

__set() メソッドを呼び出すための特定の条件です。 構文形式は次のとおりです。

public function __set(要操作的变量, 要操作变量的值){
    ... ... ;
}
ログイン後にコピー

例は次のとおりです。

<?php
    class father{
        public $study1;
        private $study2;
        public function __set($key, $value){
            echo &#39;为“&#39;.$key.&#39;”赋值“&#39;.$value.&#39;”失败!<br>&#39;;
        }
    }
    $object          = new father();
    $object -> study1  = &#39;好好学习&#39;;
    $object -> study2   = &#39;天天向上&#39;;
    $object -> study3 = &#39;福如东海&#39;;
?>
ログイン後にコピー

出力結果:

## 上記の内容 この例は、現在の環境で未定義または非表示のクラス属性に値が割り当てられると、__set() メソッドが呼び出されることを示しています。

PHP の魔法のメソッドを 5 分で理解できます (詳細な例)

#get()

<strong><span style="max-width:90%"></span>メソッド</strong>自動 __get()
メソッドを呼び出すための特定の条件は、現在の環境で未定義または非表示のクラス属性を呼び出すか取得するときです。このメソッドを定義するための構文形式は次のとおりです:

public function __get($name){
    ... ... ;
}
ログイン後にコピー

パラメータ $ name は、操作対象の変数の名前を表します。__get() メソッドの使い方を例で見てみましょう。例は次のとおりです。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>&lt;?php class father{ public $study = &amp;#39;好好学习&amp;#39;; private $study1 = &amp;#39;天天向上&amp;#39;; public function __get($study1){ echo &amp;#39;获取:“&amp;#39;.$study1.&amp;#39;”失败!&amp;#39;; } } $object = new father(); echo $object -&gt; study.&amp;#39;&lt;br&gt;&amp;#39;; echo $object -&gt; study1.&amp;#39;&lt;br&gt;&amp;#39;; echo $object -&gt; study2.&amp;#39;&lt;br&gt;&amp;#39;; ?&gt;</pre><div class="contentsignin">ログイン後にコピー</div></div>出力結果:


#上記の結果から、現在の環境で未定義または非表示のクラス属性を呼び出したり取得したりするときに、__get() メソッドが自動的に呼び出されることがわかります。

PHP の魔法のメソッドを 5 分で理解できます (詳細な例)

__isset()

<strong><span style="max-width:90%"> メソッド </span></strong>__isset を自動的に呼び出す() メソッドの特定の条件は、アクセスできない属性またはクラス内に存在しない属性に対して isset() または empty()

関数がクラスの外で使用されるとき、このメソッドの構文形式は次のとおりです。 :

<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>public function __isset($name){ ... ... ; }</pre><div class="contentsignin">ログイン後にコピー</div></div> 注意する必要があるのは次のとおりです。 パラメータ $name は、アクセスする属性の名前です。

isset()

この関数は、変数が存在するかどうかを確認するために使用され、変数が NULL でないかどうかも判断します。入力された変数が存在する場合は、true が返されます。そうでない場合は true が返され、存在する場合は false が返されます。
  • empty()

    この関数は、変数が空かどうかを確認するために使用されます。変数の値が FALSE に等しい場合、その変数は考慮されます。存在しないこと。
  • isset() 関数または empty() 関数を使用してクラス内のプライベート プロパティを検出する場合は、クラスに __isset() メソッドを追加するだけです。 isset() または empty() 関数がクラス外で使用されると、クラス内の __isset() メソッドが自動的に呼び出されます。

  • 次に、例を通して __isset() メソッドの使用法を見てみましょう。例は次のとおりです。

    <?php
        class father{
            public $study = &#39;好好学习&#39;;
            private $name = &#39;天天向上&#39;;
            public function __isset($name){
                if(property_exists(&#39;Website&#39;, $name)){
                    echo &#39;成员属性:“&#39;.$name.&#39;”存在!<br>&#39;;
                }else{
                    echo &#39;成员属性:“&#39;.$name.&#39;”不存在!<br>&#39;;
                }
            }
        }
        $object = new father();
        isset($object -> mother);
        isset($object -> name);
    ?>
    ログイン後にコピー
  • 出力結果:



注意する必要があるのは、

property_exists()

関数を使用して、プロパティが構文形式は PHP の魔法のメソッドを 5 分で理解できます (詳細な例)

 property_exists($class_name,$property_name)
ログイン後にコピー

ここで、$class_name は文字列形式のクラス名、つまり、property_name 属性がクラス class_name に定義されているかどうかを決定します。

__unset()

<strong><span style="max-width:90%">メソッド</span></strong>自動呼び出し__unset() このメソッドの特定の条件は、アクセスできないプロパティまたはクラスに存在しないプロパティに対してクラスの外で unset() 関数が使用される場合です。このメソッドの構文形式は次のとおりです:

public function __unset($name){
    ... ... ;
}
ログイン後にコピー

其中我们需要注意的是:

  • 参数 $name 为要访问的属性名称。

  • unset() 函数的作用是删除指定的变量,需要传入一个或多个变量作为参数,另外,该函数没有返回值。

  • 可以使用 unset() 函数在类外部去删除类中的成员属性。如果要删除类中的公有属性的话直接使用 unset() 函数即可;

  • 如果要删除类中的私有属性的话,则需要在类中添加一个 __unset() 方法。

接下来我们通过实例来看一下__unset()方法的使用,实例如下:

<?php
    class father{
        public $name = &#39;http://c.biancheng.net/php/&#39;;
        private $study = &#39;C语言中文网&#39;;
        public function __unset($study){
            if(property_exists(&#39;father&#39;, $study)){
                unset($this->$study);
                echo &#39;移除成员属性:“&#39;.$study.&#39;”成功!<br>&#39;;
            }else{
                echo &#39;成员属性:“&#39;.$study.&#39;”不存在!<br>&#39;;
            }
        }
    }
    $object = new father();
    unset($object->name);
    unset($object->study);
    unset($object->study1);
?>
ログイン後にコピー

输出结果:

PHP の魔法のメソッドを 5 分で理解できます (詳細な例)

由上述实例看出当在类外部对类中不可访问或不存在的属性使用 unset() 函数时,__unset() 方法会被自动调用。

上述实例中给大家介绍了一些常用的魔术方法,但这并不是魔术方法的全部,那接下来再给大家列举一些魔术方法:

  • __call()  --- 调用一个不存在的方法时自动调用   

  • __sleep()  ---  使用 serialize 序列化时自动调用    

  • __toString() ---   把对象转换成字符串时自动调用   

  • __invoke()  ---  当尝试把对象当方法调用时自动调用

  • __wakeup()  ---  使用 unserialize 反序列化时自动调用    

  • __callStatic()  ---  调用一个不存在的静态方法时自动调用    

  • __debugInfo()  ---  使用 var_dump() 打印对象信息时自动调用 

  • __set_state()  ---  当使用 var_export() 函数时自动调用,接受一个数组参数    

大家如果感兴趣的话,可以点击《PHP视频教程》进行更多关于PHP知识的学习。

以上がPHP の魔法のメソッドを 5 分で理解できます (詳細な例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

今まで知らなかったことを後悔している 7 つの PHP 関数 今まで知らなかったことを後悔している 7 つの PHP 関数 Nov 13, 2024 am 09:42 AM

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

母音を文字列にカウントするPHPプログラム 母音を文字列にカウントするPHPプログラム Feb 07, 2025 pm 12:12 PM

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

PHPでの後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? Apr 03, 2025 am 12:03 AM

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。

See all articles