検索
ホームページバックエンド開発PHPチュートリアルPHP における __set __get __isset __unset の使用法の概要 オブジェクト指向_PHP チュートリアル

PHP オブジェクト指向では __set __get __isset __unset などの使い方をよく見かけますが、なぜこれらが使われるのか分かりません。一つずつ使い方を紹介していきます。

一般的に言えば、クラス属性は常にプライベートとして定義してください。これはより現実的なロジックに沿ったものです。ただし、属性の読み取りと割り当ての操作は非常に頻繁に行われるため、PHP5 では、属性を取得して割り当てるための 2 つの関数「__get()」と「__set()」、および属性を確認するための「__isset」が事前定義されています。 )」と属性を削除するメソッド「__unset()」。
前のセクションでは、各属性の設定および取得メソッドを説明しました。PHP5 には、属性の値を設定および取得するための特別なメソッド「__set()」および「__get()」メソッドが用意されています。デフォルトで存在しますが、コンストラクター メソッド (__construct()) と同様に、これら 2 つのメソッドは次の方法で追加する場合にのみ存在します。 、個人的なスタイルに従って追加することもできます:

//__get() メソッドはプライベート プロパティを取得するために使用されます

コードは次のとおりです コードをコピーします

private function __get($ property_name)


{


if(isset($this->$property_name))


{


return($this->$property_name);


}else


{


return(NULL);


}


}


//__set() メソッドはプライベート プロパティの設定に使用されます


プライベート関数 __set($property_name, $value)


{


$this- >$property_name = $value;


}

__get() メソッド: このメソッドは、プライベート メンバー属性値を取得するために使用されます。パラメーターは、取得したいメンバー属性の名前で渡され、取得された属性値が返されます。このメソッドを手動で呼び出す必要はありません。これは、このメソッドをプライベート メソッドにすることもできるため、プライベート プロパティが直接取得されたときにオブジェクトによって自動的に呼び出されます。 private プロパティはカプセル化されているため、値を直接取得することはできません (例: "echo $p1->name" を直接取得するのは誤りです)。ただし、このメソッドをクラスに追加する場合は、「 「echo $p1->name」は値を直接取得し、__get($property_name) メソッドが自動的に呼び出され、このメソッドの内部実行を通じてプロパティ名がパラメータ $property_name に渡されます。渡した属性の値が返されます。メンバーのプロパティがプライベートとしてカプセル化されていない場合、オブジェクト自体はこのメソッドを自動的に呼び出しません。
__set() メソッド: このメソッドは、プライベート メンバー属性の値を設定するために使用されます。最初のパラメーターは、値を設定する属性の名前です。2 番目のパラメーターは、必要な値です。属性に設定する戻り値はありません。このメソッドは手動で呼び出す必要はなく、プライベート属性値を直接設定するときに自動的に呼び出されます。 __set() メソッドが存在しない場合は許可されません。例: $this->name='zhangsan' の場合、エラーが発生しますが、クラスに __set($property_name, $value) メソッドを追加すると、プライベート プロパティに値を直接割り当てることができます。呼び出されると自動的に呼び出され、$property_nameにnameなどの属性を渡し、$valueに代入する値「zhangsan」を渡します。このメソッドの実行により代入の目的は達成されます。メンバーのプロパティがプライベートとしてカプセル化されていない場合、オブジェクト自体はこのメソッドを自動的に呼び出しません。不正な値を渡さないように、このメソッドで判定することもできます。コードは次のとおりです:

コードは次のとおりです

class person


{


//以下は、のメンバー属性です。 person、すべてカプセル化されたプライベートメンバーです


private $name; //その人の名前


private $sex;


private function __get($property_name)


echo "プライベート プロパティ値を取得すると、この __get() メソッドが自動的に呼び出されます
";


if(isset( $this->$property_name))


{


return($this->$property_name) ;


}


else


{


return(NULL);


}


}


//__set()メソッドはプライベートプロパティを設定するために使用されます


プライベート関数__set ($property_name, $value)


{


echo "プライベート プロパティ値を直接設定する場合、この __set() メソッドが自動的に呼び出され、プライベート プロパティに値を割り当てます
";



$this->$property_name = $value;


}


}

$p1=new Person();


//値をプライベート属性に直接割り当てる場合、__set( ) メソッドが自動的に呼び出され、値が割り当てられます


$p1->name="张三";


$p1-> sex="male";


$p1->age=20 ;


//プライベート属性の値を直接取得すると、__get() メソッドが自動的に呼び出され、メンバー属性の値が返されます


echo "Name :".$p1->name."< ;br>gt;";


echo "性別:".$p1->性別。"
";


echo "年齢:".$p1->年齢。"
" ;


?>


プログラムの実行結果:
プライベート属性の値を直接設定する場合、__set()メソッドが自動的に呼び出され、プライベート属性に値が割り当てられます。
プライベート属性の値を直接設定する場合、__set()メソッドは割り当て
プライベート属性の値を直接設定する場合、__set()メソッドが自動的に呼び出され、プライベート属性に値を割り当てます
プライベート属性の値を直接取得する場合、 __get()メソッドが自動的に呼び出されます
名前:Zhang San
Inプライベート属性値を直接取得する場合、この__get()メソッドが自動的に呼び出されます
性別:男性
プライベート属性値を直接取得する場合、この__get()メソッドは自動的に呼び出されます
年齢: 20歳

上記のコードがそうでない場合 __get() メソッドと __set() メソッドを追加すると、プライベート メンバーをクラス外で操作できないため、プログラムが失敗します。上記のコードが直接役立ちます。 __get() メソッドと __set() メソッドを自動的に呼び出すことによって、カプセル化されたプライベート メンバーにアクセスします。
__isset() メソッド: このメソッドを説明する前に、「isset()」関数の応用を見てみましょう。 isset() は、変数がパラメータとして設定されているかどうかを判断するために使用される関数です。渡された変数が存在する場合は true を返し、それ以外の場合は false を返します。では、オブジェクトの外部で「isset()」関数を使用して、オブジェクト内のメンバーが設定されているかどうかを判断する場合、それを使用できるでしょうか?オブジェクト内のメンバーがパブリックである場合、この関数を使用してメンバー属性を測定できますが、プライベートなメンバー属性はカプセル化されているため、この関数は機能しません。外部に露出します。では、オブジェクトの外部で「isset()」関数を使用して、プライベートメンバー属性が設定されているかどうかを判断することはできないのでしょうか?はい、「__isset()」メソッドをクラスに追加するだけで済みます。オブジェクト内のプライベートメンバーが設定されているかどうかを判断するために「isset()」関数がクラスの外部で使用される場合、この関数は内部で自動的に呼び出されます。 「__isset()」メソッドはそのような操作を完了するのに役立ち、「__isset()」メソッドをプライベートにすることもできます。次のコードをクラスに追加するだけです:

コードをコピー
コードは次のとおりです コードをコピー

private function __isset($nm)


{


echo "クラス外のときisset() 関数を使用してプライベート メンバー $nm を決定すると、自動的に呼び出されます
";


return isset($this->$nm);


}

__unset() メソッド: このメソッドを見る前に、まず「unset()」関数を見てみましょう。「unset()」の関数は、指定された変数を削除し、true を返すことです。変数が削除されます。では、オブジェクトの外部にあるオブジェクト内のメンバー属性を削除したい場合は、「unset()」関数を使用できますか? オブジェクト内のメンバー属性がパブリックである場合、この関数を使用して削除できます。オブジェクトのパブリック属性。オブジェクトのメンバー属性がプライベートである場合、同様に、オブジェクトに「__unset()」メソッドを追加する場合も同様です。 、オブジェクトのプライベート メンバー プロパティから削除できます。 「__unset()」メソッドをオブジェクトに追加した後、オブジェクトの外部で「unset()」関数を使用してオブジェクト内のプライベートメンバー属性を削除すると、「__unset()」関数が自動的に呼び出され、オブジェクト内のプライベート メンバー属性。このメソッドはクラス内でプライベートとして定義することもできます。次のコードをオブジェクトに追加するだけです:

コードは次のとおりですコードをコピーhttp://www.bkjia.com/PHPjc/444688.html
private function __unset($nm)

{

echo "クラス外で unset( を使用する場合) プライベート メンバーを削除するときに自動的に呼び出す関数
";

unset($this->$nm);

}

完全な例を見てみましょう:

class Person

{

//以下は person のメンバー属性です

private $name; age; //人の年齢

//__get() メソッドを使用して取得しますプライベートプロパティ

プライベート関数 __get($property_name)

{

if(isset($this->$property_name) )

{

return($this->$property_name);

}else {

return(NULL);

}

}

//__set() メソッド プライベートプロパティの設定に使用されます

プライベート関数 __set($property_name, $value)

{


$this->$property_name = $value;


}

//__isset()メソッド

プライベート関数__isset($nm)

{

エコー"isset() 関数がプライベート メンバーを決定すると、自動的に
を呼び出します。";

return isset($this->$nm ;
";

unset($this-> $nm);

}

}

$p1=new Person();

$p1->name= "this is a person name";

// issetを使用する場合() 関数を使用してプライベート メンバーを測定すると、完了を支援するために __isset() メソッドが自動的に呼び出され、返される結果は true

echo var_dump(isset($p1- >name)) です。"
";

echo $p1->name."
";

// unset() 関数を使用してプライベート メンバーを削除すると、自動的に呼び出されます_ _unset() メソッドは、 name を削除します private 属性

unset($p1->name);

// は削除されているため、この行には出力はありません

echo $p1-> ;name;

?>


出力結果は次のとおりです:

isset() 関数は、プライベートメンバーを測定するときに自動的に
bool(true) を呼び出します

これは人の名前です

unset() がクラス外で使用される場合、関数は自動的に呼び出されますプライベート メンバー
__set()、__get()、__isset()、__unset() を削除するときに呼び出されます。これらの 4 つのメソッドはすべてオブジェクトに追加され、オブジェクト内のプライベート プロパティに対する操作を完了するために必要なときに自動的に呼び出されます。




http://www.bkjia.com/PHPjc/444688.html

www.bkjia.com

tru​​e

技術記事

PHPのオブジェクト指向では __set __get __isset __unset などの使い方をよく見かけますが、なぜこれらが使われるのか分かりません...一つずつ紹介していきます


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

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHPは、シンプルな構文と高い実行効率を備えたWeb開発に適しています。 2。Pythonは、簡潔な構文とリッチライブラリを備えたデータサイエンスと機械学習に適しています。

PHP:それは死にかけていますか、それとも単に適応していますか?PHP:それは死にかけていますか、それとも単に適応していますか?Apr 11, 2025 am 12:13 AM

PHPは死にかけていませんが、常に適応して進化しています。 1)PHPは、1994年以来、新しいテクノロジーの傾向に適応するために複数のバージョンの反復を受けています。 2)現在、電子商取引、コンテンツ管理システム、その他の分野で広く使用されています。 3)PHP8は、パフォーマンスと近代化を改善するために、JITコンパイラおよびその他の機能を導入します。 4)Opcacheを使用してPSR-12標準に従って、パフォーマンスとコードの品質を最適化します。

PHPの未来:適応と革新PHPの未来:適応と革新Apr 11, 2025 am 12:01 AM

PHPの将来は、新しいテクノロジーの傾向に適応し、革新的な機能を導入することで達成されます。1)クラウドコンピューティング、コンテナ化、マイクロサービスアーキテクチャに適応し、DockerとKubernetesをサポートします。 2)パフォーマンスとデータ処理の効率を改善するために、JITコンパイラと列挙タイプを導入します。 3)パフォーマンスを継続的に最適化し、ベストプラクティスを促進します。

PHPの抽象クラスまたはインターフェイスに対して、いつ特性を使用しますか?PHPの抽象クラスまたはインターフェイスに対して、いつ特性を使用しますか?Apr 10, 2025 am 09:39 AM

PHPでは、特性は方法が必要な状況に適していますが、継承には適していません。 1)特性により、クラスの多重化方法が複数の継承の複雑さを回避できます。 2)特性を使用する場合、メソッドの競合に注意を払う必要があります。メソッドの競合は、代替およびキーワードとして解決できます。 3)パフォーマンスを最適化し、コードメンテナビリティを改善するために、特性の過剰使用を避け、その単一の責任を維持する必要があります。

依存関係噴射コンテナ(DIC)とは何ですか?また、なぜPHPで使用するのですか?依存関係噴射コンテナ(DIC)とは何ですか?また、なぜPHPで使用するのですか?Apr 10, 2025 am 09:38 AM

依存関係噴射コンテナ(DIC)は、PHPプロジェクトで使用するオブジェクト依存関係を管理および提供するツールです。 DICの主な利点には、次のものが含まれます。1。デカップリング、コンポーネントの独立したもの、およびコードの保守とテストが簡単です。 2。柔軟性、依存関係を交換または変更しやすい。 3.テスト可能性、単体テストのために模擬オブジェクトを注入するのに便利です。

通常のPHPアレイと比較して、SPL SPLFIXEDARRAYとそのパフォーマンス特性を説明してください。通常のPHPアレイと比較して、SPL SPLFIXEDARRAYとそのパフォーマンス特性を説明してください。Apr 10, 2025 am 09:37 AM

SplfixedArrayは、PHPの固定サイズの配列であり、高性能と低いメモリの使用が必要なシナリオに適しています。 1)動的調整によって引き起こされるオーバーヘッドを回避するために、作成時にサイズを指定する必要があります。 2)C言語アレイに基づいて、メモリと高速アクセス速度を直接動作させます。 3)大規模なデータ処理とメモリに敏感な環境に適していますが、サイズが固定されているため、注意して使用する必要があります。

PHPは、ファイルを安全に処理する方法をどのように処理しますか?PHPは、ファイルを安全に処理する方法をどのように処理しますか?Apr 10, 2025 am 09:37 AM

PHPは、$ \ _ファイル変数を介してファイルのアップロードを処理します。セキュリティを確保するための方法には次のものが含まれます。1。アップロードエラー、2。ファイルの種類とサイズを確認する、3。ファイル上書きを防ぐ、4。ファイルを永続的なストレージの場所に移動します。

Null Coulescingオペレーター(??)およびNull Coulescing Assignment Operator(?? =)とは何ですか?Null Coulescingオペレーター(??)およびNull Coulescing Assignment Operator(?? =)とは何ですか?Apr 10, 2025 am 09:33 AM

JavaScriptでは、nullcoalescingoperator(??)およびnullcoalescingsignmentoperator(?? =)を使用できます。 1.??最初の非潜水金または非未定されたオペランドを返します。 2.??これらの演算子は、コードロジックを簡素化し、読みやすさとパフォーマンスを向上させます。

See all articles

ホット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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

SublimeText3 中国語版

SublimeText3 中国語版

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

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター