ホームページ > バックエンド開発 > PHPの問題 > PHPでのアンダースコアは何を意味しますか

PHPでのアンダースコアは何を意味しますか

藏色散人
リリース: 2023-03-14 21:06:02
オリジナル
3216 人が閲覧しました

php の 1 つのアンダースコアはプライベート変数とプライベート メソッドを表し、2 つのアンダースコアは PHP の組み込み変数です。たとえば、PHP では 2 つのアンダースコアで始まるメソッドはマジック メソッドとして予約されると規定されているため、既存のマジック メソッドをオーバーロードする場合を除き、__ で始めないでください。

PHPでのアンダースコアは何を意味しますか

この記事の動作環境: Windows7 システム、PHP7.1 バージョン、DELL G3 コンピューター

下線の意味in php?

PHP におけるアンダースコアで始まる変数の意味

命名規則

1 つ追加することは非公開です

2 つ追加することは一般的にですシステムデフォルト、システムによって事前に定義されている、いわゆる:

======================

「Magic」 「メソッド」と「マジック定数」

#======================

★double で始まり double で終わる PHP 定数アンダースコアは「マジック定数」です。

__LINE__ファイル内の現在の行番号。

#__FILE__ファイルの完全なパスとファイル名。

#__DIR__ファイルが配置されているディレクトリ。インクルードされたファイル内で使用された場合、インクルードされたファイルが配置されているディレクトリを返します。これは dirname(__FILE__) と同等です。ルート ディレクトリでない限り、ディレクトリ名には末尾のスラッシュは含まれません

注: 上記の内容は、「PHP 中国語マニュアル -> 言語リファレンス -> 定数 -> マジック定数」から引用しています。

php5 以降のバージョンでは、php クラスでマジック メソッドを使用できるようになりました。

PHP では、2 つのアンダースコア (__) で始まるメソッドはマジック メソッドとして予約されると規定されているため、既存のマジック メソッドをオーバーロードする場合を除き、関数名を __ で始めないことをお勧めします。

PHP のマジック メソッドは次のとおりです: __construct、__destruct、__call、__callStatic、__get、__set、__isset、__unset、__sleep、__wakeup、__toString、__set_state、__clone、__autoload

1、__get、 __set

これら 2 つのメソッドは、クラスとその親クラスで宣言されていないプロパティ用に設計されています

__get( $property ) 未定義のプロパティが呼び出されると、このメソッドがトリガーされます。渡されるパラメータは、アクセスされるプロパティ名です。

#__set( $property, $value ) 未定義のプロパティに値を割り当てると、このメソッドがトリガーされます。渡されるパラメータは、設定されるプロパティです。名前と値

ここで宣言されていないものには、オブジェクトを使用して呼び出されたときにアクセス制御が保護されプライベートである属性 (つまり、アクセス許可を持たない属性) が含まれます。

2, __isset, __unset

__isset( $property ) このメソッドは、isset() 関数が未定義のプロパティに対して呼び出されたときに呼び出されます。

__unset( $property ) unset() 関数が未定義のプロパティに対して呼び出されたときにメソッドが呼び出されます。

__get メソッドおよび __set メソッドと同じです。ここには宣言はありません。オブジェクトを使用して呼び出す場合、アクセス制御は保護されます。 private. 属性 (つまり、アクセス許可を持たない属性)

#3. __call

__call( $method, $arg_array ) このメソッドは、未定義のメソッドを呼び出すときに呼び出されます

ここでの未定義メソッドには、アクセス権限のないメソッドも含まれます。メソッドが存在しない場合は、親クラスに移動してメソッドを見つけます。親クラスに存在しない場合は、__call() を呼び出します。このクラスの __call() メソッドが親クラスに存在しない場合は、__call() メソッド

4 および __autoload

__autoload 関数に進み、自動的にまだ定義されていないクラスを使用しようとすると表示されます。この関数を呼び出すことにより、スクリプト エンジンは、PHP がエラーで失敗する前に、必要なクラスをロードする最後のチャンスを得ることができます。

グローバル オートロード クラスを定義する場合は、spl_autoload_register() メソッドを使用して、処理クラスを PHP 標準ライブラリに登録する必要があります:

<?php  
class Loader  
{  
static function autoload_class($class_name)  
{  
//寻找正确的$class_name类,并引入,没有则抛出异常  
}  
}  
  
/** 
*  设置对象的自动载入 
*  spl_autoload_register — Register given function as __autoload() implementation 
*/  
spl_autoload_register(array(&#39;Loader&#39;, &#39;autoload_class&#39;));  
  
$a = new Test();//Test没用require就实例化,实现自动加载,很多框架就用这种方法自动加载类  
  
?>
ログイン後にコピー

注: __autoload 関数でスローされる例外これは catch ステートメント ブロックではキャッチできず、致命的なエラーを引き起こすため、関数自体でキャッチする必要があります。

5, __construct, __destruct

__construct コンストラクター メソッド。このメソッドはオブジェクトの作成時に呼び出されます。PHP4 と比較してこのメ​​ソッドを使用する利点は、コンストラクター メソッドに一意の名前を付けることができることです。 . それが含まれるクラスの名前は関係ありません。このようにして、クラスの名前を変更するときに、コンストラクター メソッド

__destruct デストラクター メソッドの名前を変更する必要はありません。PHPオブジェクトが破棄される前にメモリから削除されます。クリアする前に、このメソッドを呼び出します。デフォルトでは、PHP はオブジェクトのプロパティによって占有されているメモリのみを解放し、オブジェクト関連のリソースを破棄します。デストラクタを使用すると、オブジェクトの使用後に任意のコードを実行してメモリをクリアできます。スクリプトがオブジェクトに関連付けられなくなったと PHP が判断すると、デストラクターが呼び出されます。

関数の名前空間では、関数が返されたときにこれが発生します。

グローバル変数の場合、これはスクリプトの最後に発生します。

オブジェクトを明示的に破棄する場合は、オブジェクトを指す変数に他の値を割り当てることができます。通常は、変数を NULL に割り当てるか、unset を呼び出します。

6, __clone

PHP5 のオブジェクトの代入では参照代入が使用されます。オブジェクトをコピーしたい場合は、clone メソッドを使用する必要があります。このメソッドを呼び出すと、オブジェクトは自動的に __clone マジック メソッドを呼び出します。オブジェクトがコピーされると、初期化操作を実行する必要があります。 __clone メソッドで実装できます。

7, __toString

__toString メソッドは、オブジェクトを文字列に変換するとき (echo を使用してオブジェクトを出力するときなど)、自動的に呼び出されます。

クラスがこのメソッドを実装していない場合、オブジェクトはエコーを通じて出力できません。そうでない場合は、次のメッセージが表示されます: キャッチ可能な致命的なエラー: クラス テストのオブジェクトを文字列に変換できませんでした。

このメソッドは返される必要があります。文字列。

PHP 5.2.0 より前では、__toString メソッドは echo() または print() と組み合わせて使用​​した場合にのみ有効でした。 PHP 5.2.0 以降では、任意の文字列環境 (%s 修飾子を使用した printf() など) で有効になりますが、非文字列環境 (%d 修飾子の使用など) では使用できません。 PHP 5.2.0 以降、__toString メソッドが定義されていないオブジェクトが文字列に変換されると、E_RECOVERABLE_ERROR エラーが報告されます。

8, __sleep, __wakeup

__sleep シリアル化するときは、

__wakeup を使用します。逆シリアル化するときは、

serialize() を呼び出してクラスを確認します。マジック名 __sleep の関数。その場合、関数はシリアル化の前に実行されます。これはオブジェクトをクリアし、シリアル化する必要があるオブジェクト内のすべての変数の名前を含む配列を返す必要があります。

__sleep を使用する目的は、オブジェクトが持つデータベース接続を閉じたり、保留中のデータを送信したり、同様のクリーンアップ タスクを実行したりすることです。さらに、この機能は、完全に保管する必要のない非常に大きなオブジェクトがある場合にも役立ちます。

対照的に、unserialize() は、マジック名 __wakeup を持つ関数の存在を確認します。この関数は、オブジェクトが持つ可能性のあるリソースが存在する場合、それを再構築できます。

__wakeup を使用する目的は、シリアル化中に失われた可能性のあるデータベース接続を再確立し、他の再初期化タスクを処理することです。

9, __set_state

var_export() が呼び出されるとき、この静的メソッドが呼び出されます (PHP 5.1.0 以降で有効)。

このメソッドの唯一のパラメータは配列です。これには、array('property' => value, ...) の形式で配置されたクラス プロパティが含まれます。

10. __invoke

関数を呼び出してオブジェクトを呼び出そうとすると、__invoke メソッドが自動的に呼び出されます。

PHP5.3.0 以降で有効です

11. __callStatic

これは __call() マジック メソッドと同様に機能します。__callStatic() は静的メソッド呼び出しを処理します。

##PHP5.3.0 以降で有効です

PHP では __callStatic() メソッドの定義が強化されており、このメソッドは public であり、static として宣言されている必要があります。同様に、__call() マジック メソッドは、他のすべてのマジック メソッドと同様に、パブリックとして定義する必要があります。

推奨学習: 「

PHP ビデオ チュートリアル

以上がPHPでのアンダースコアは何を意味しますかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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