検索
ホームページバックエンド開発PHPの問題PHPのgetとsetの違いは何ですか

php における get と set の違い: 「__get()」メソッドはプライベートメンバーの属性値を取得するために使用され、返される結果は取得された属性値ですが、「__set()」メソッドはメソッドはプライベート メンバーの属性値を取得するために使用されます。プライベート メンバーの属性値を設定する場合、このメソッドには戻り値がありません。

PHPのgetとsetの違いは何ですか

このチュートリアルの動作環境: Windows10 システム、PHP7.1 バージョン、DELL G3 コンピューター

get と set の違いは何ですか? in php

一般に、クラスの属性は常にプライベートとして定義します。これは、より現実的なロジックに沿ったものです。ただし、属性の読み取りと代入の操作は非常に頻繁に行われるため、PHP5 では、属性を取得および代入するための 2 つの関数「__get()」と「__set()」があらかじめ定義されています。これは Java での Javabean の操作に似ており、使用されるメソッドも同様ですが、Javabean のように各フィールドで set および get 操作を実行する必要がない点が異なります。 2 つの魔法のメソッドを追加するだけです。つまり、プライベートメンバーの値を設定・取得する操作です。

PHP5 では、属性の値を設定および取得するための特別なメソッド「__set()」と「__get()」の 2 つのメソッドが提供されています。これら 2 つのメソッドはデフォルトでは存在しませんが、これらは手動でクラスに追加します。コンストラクター メソッド (__construct()) と同様、クラスに追加された場合にのみ存在します。これら 2 つのメソッドは次の方法で追加できます。もちろん、状況に応じて追加することもできます。自分のスタイルに合わせて:

//__set()方法用来设置私有属性
public function __set($name,$value){
$this->$name = $value;
}
//__get()方法用来获取私有属性
public function __get($name){
return $this->$name;
}
  • __get() メソッド: このメソッドは、プライベート メンバー属性の値を取得するために使用されます。パラメータが 1 つあります。パラメータは、次の名前で渡されます。取得したいメンバー属性、および取得した属性値が返されます。このメソッドをプライベート メソッドにすることもできるため、このメソッドを手動で呼び出す必要はありません。プライベート メソッドは、プライベート属性が取得されたときにオブジェクトによって自動的に呼び出されます。直接取得されます。 private プロパティはカプセル化されているため、値を直接取得することはできませんが、このメソッドをクラスに追加すると、「echo$p1->name」などの文を使用したときに自動的に値を直接取得できるようになります。 __get($name) メソッドを使用し、属性名をパラメーター $name に渡します。このメソッドの内部実行を通じて、渡したプライベート属性の値が返されます。メンバーのプロパティがプライベートとしてカプセル化されていない場合、オブジェクト自体はこのメソッドを自動的に呼び出しません。

  • #__set() メソッド: このメソッドは、プライベート メンバー属性の値を設定するために使用されます。2 つのパラメーターがあります。最初のパラメーターは、設定する属性の名前ですの値。2 番目のパラメータは、値を設定する属性の名前です。最初のパラメータは、属性に設定する値で、戻り値はありません。このメソッドも手動で呼び出す必要はありません。プライベートにすることもできます。プライベート属性値を直接設定すると自動的に呼び出されます。同じプライベート属性はカプセル化されています

、 __set() メソッドがない場合は許可されません。たとえば、 $this->name='zhangsan' とするとエラーが発生しますが、 __set($property_name, $value) をクラスに追加するとエラーになります)このメソッドは、プライベート属性に直接値を代入する際に自動的に呼び出されます。$property_nameにnameなどの属性を渡し、$valueに代入する値「zhangsan」を渡します。このメソッドの実行により、代入が行われます。目的を達成しました。メンバーのプロパティがプライベートとしてカプセル化されていない場合、オブジェクト自体はこのメソッドを自動的に呼び出しません。不正な値を渡さないように、このメソッドで判定することもできます。コードは次のとおりです:

class Person
{
    //下面是人的成员属性,都是封装的私有成员
    private $name; //人的名子
         private $sex; //人的性别
     private $age; //人的年龄
 
     //__get()方法用来获取私有属性
     public function __get($property_name)
    {
        echo "在直接获取私有属性值的时候,自动调用了这个__get()方法<br>";
        if (isset($this->$property_name)) {
            return ($this->$property_name);
       } else {
            return (NULL);
         }
     }
 
    //__set()方法用来设置私有属性
     public function __set($property_name, $value)
     {
         echo "在直接设置私有属性值的时候,自动调用了这个__set()方法为私有属性赋值<br>";
         $this->$property_name = $value;
     }
 }
 
 $p1 = new Person();
 //直接为私有属性赋值的操作,会自动调用__set()方法进行赋值
 $p1->name = "张三";
 $p1->sex  = "男";
 $p1->age  = 20;
 //直接获取私有属性的值,会自动调用__get()方法,返回成员属性的值
 echo "姓名:" . $p1->name . "<br>";
 echo "性别:" . $p1->sex . "<br>";
 echo "年龄:" . $p1->age . "<br>";

プログラムの実行結果:

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

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

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

名前: Zhang San

private 属性値を直接取得する場合は、__get() メソッドが自動的に呼び出されます。この __get() メソッド

性別: 男性

プライベート属性値を直接取得する場合は、__get() メソッドが自動的に呼び出されます。 private 属性値を指定すると、この __get() メソッドが自動的に呼び出されます。

年齢: 20

上記のコードに __get() メソッドと __set() メソッドが追加されていない場合、プログラムは間違った動作をします。プライベート メンバーはクラスの外部で操作できず、上記のコードは自動的に __get() と _set() メソッドを呼び出すため、カプセル化されたプライベート メンバーに直接アクセスするのに役立ちます。

推奨学習: 「

PHP ビデオ チュートリアル

以上がPHPのgetとsetの違いは何ですかの詳細内容です。詳細については、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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

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

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

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

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 中国語版

SublimeText3 中国語版

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

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、