検索
ホームページphp教程php手册PHP オブジェクト指向ガイド (5) カプセル化

PHP オブジェクト指向ガイド (5) カプセル化

Jun 13, 2016 pm 12:21 PM
php完全な戦略そして物体カプセル化属性はい特性プログラミングのために

9. カプセル化
カプセル化は、オブジェクト指向プログラミングの 3 つの主要な特徴の 1 つであり、オブジェクトのプロパティとサービスを
の独立した同一のユニットに結合することです。オブジェクトの内部詳細を隠すことには 2 つの意味があります。 1. オブジェクトのすべての属性とすべてのサービスを結合して、分割できない独立した単位 (つまり、オブジェクト) を形成する。 2. 情報の隠蔽。つまり、オブジェクトの内部の詳細を可能な限り隠し、外界との境界を形成し(または障壁を形成し)、外界と接続するための限られた外部インターフェイスのみを保持します。ソフトウェアにおける
カプセル化の原理の反映は、オブジェクト以外の部分がオブジェクトの内部データ
(属性) に自由にアクセスできないことを要求し、それによって外部データの「相互感染」を効果的に回避します。エラーとその原因 ソフトウェア エラーを特定できるため、トラブルシューティングやトラブルシューティングの困難さが大幅に軽減されます。
例を使用して、ある人のオブジェクトに年齢や給与などの属性があるとします。そのような個人のプライバシー属性
は、カプセル化を使用しない場合、他の人が取得できるようになります。彼らは知りたいと思っていますが、
それをカプセル化すると、あなたがそれを伝えない限り、他の人はカプセル化された属性を取得する方法がありません
別の例として。 、すべてのパソコンにはパスワードがあります。他人に自由にログインさせたくない場合は、パスワードをコピーして
コンピュータに貼り付けてください。また、人間などの物体の場合、身長や年齢などの属性は自分自身でのみ増加させることができ、他人が任意に割り当てることはできません。
private キーワードを使用してプロパティとメソッドをカプセル化します。
元のメンバー:
var $name; //宣言者の名前
var $sex; //宣言者の性別
var $age; //その人の年齢を宣言します
function run(){… … .}
カプセル化された形式に変更します:
private $name //その人の名前には private キーワードを使用します Encapsulateprivate $sex; //プライベート キーワードを使用して個人の性別をカプセル化します
private $age //プライベート キーワードを使用して個人の年齢をカプセル化します
private function run(){… … } //プライベート キーワードを使用します人の歩行方法をカプセル化する
注: メンバー属性の前に他のキーワードがある限り、元のキーワード「var」を削除する必要があります。
プライベートを通じて人間のメンバー (メンバーのプロパティとメンバーのメソッド) をカプセル化できます。パッケージ内のメンバーにはクラスの外部から
直接アクセスできません。次のコードではエラーが生成されます。
コード スニペット



コードをコピーします

コードは次のとおりです。

class Person{ //以下は person のメンバー属性ですprivate $name;その人の名前は、privateprivate $sex でカプセル化されます。 //その人の性別、privateprivate $age でカプセル化されます。 //その人の年齢、private

でカプセル化されます。//この人ができる方法speech

function Say(){
echo "私の名前は: ".$this->name." 性別: ".$this->性別" 私の年齢: ".$this-> ;age. "
";
}
//この人が歩くことができるメソッドはプライベートにカプセル化されます
private function run(){
echo "この人は歩いています";
}
}
//人のインスタンス オブジェクトをインスタンス化します
$p1=new Person();
//プライベート属性に値を割り当てようとすると、エラーが発生します
$ p1->name="張三";
$p1->sex="男性";
$p1->age=20>//プライベート属性を出力しようとしています、結果 エラーが発生します
echo $p1->name.”
”;
echo $p1->sex.”
echo $p1->”; ;age. "
"
//プライベートメンバーメソッドを出力しようとするとエラーが発生します


は:
致命的なエラー: プライベート プロパティにアクセスできません Person::$name
致命的なエラー: プライベート プロパティ Person::$sex にアクセスできません
致命的なエラー: プライベート プロパティ Person::$age にアクセスできません
致命的エラー: プライベート プロパティ Person::$name にアクセスできません
致命的エラー: コンテキスト '' からプライベート メソッド Person::run() を呼び出します
上記の例からわかるように、プライベート メンバーには外部からアクセスできませんプライベートメンバーはこのオブジェクト
内でのみアクセスできるため、たとえば、$p1 オブジェクトがプライベート属性を共有したい場合は、say() メソッドでプライベート属性にアクセスします。 (アクセス制御は追加されません。デフォルトはパブリックで、どこからでもアクセスできます。)

コード スニペット



コードをコピー

コードは次のとおりです。


//この人は話すことができ、自分のプライベート属性を話すことができ、ここからプライベート メソッドにアクセスすることもできます
function Say(){
echo "My name is : ".$ this->name." 性別: ".$this->sex." 私の年齢: ".$this->age."
"
//プライベート メソッドでは次のこともできます。ここからアクセスします

//$this->run() }
メンバー メソッドsay() は public であるため、上記の
コードを変更します。

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

class Person{
//以下は person のメンバー属性です
private $name;個人の名前、private
private $sex でカプセル化 //個人の性別は private
private $age でカプセル化 //個人の年齢は private
でカプセル化されます。コンストラクター パラメーターはプライベート属性名 $name、性別 $sex、年齢 $age に割り当てられます。
function __construct($name, $sex, $age){
//コンストラクターを通じて渡される $nameメソッドはプライベート メンバーに割り当てられます。属性 $this->name には初期値が割り当てられます。
$this->name=$name
//構築メソッドを通じて渡された $sex には、プライベート メンバー属性の初期値 $this->sex Value
$this->sex=$sex;
//コンストラクターを通じて渡された $age は、プライベート メンバー プロパティに初期値が割り当てられます。 $this->age
$this->age =$age;
}
//この人の話し方、個人的なプロパティの話し方、ここからプライベート メソッドにアクセスすることもできます。 🎜>function Say(){
echo "私の名前 名前: ".$this->name." 性別: ".$this->性別" 私の年齢: ".$this->age ."
";
}
}
//構築メソッドを通じて 3 つのオブジェクト $p1、p2、$p3 を作成し、3 つの異なる実際のパラメーターを渡します: 名前、性別、年齢
$p1=新しい人("張三","男性", 20);
$p2=新しい人("李思","女性", 30); "王五","男", 40) ;
//以下は $p1 オブジェクトの発話メソッドにアクセスします
$p1->say();
//以下は発話メソッドにアクセスします$p2 オブジェクトのメソッド
$p2->say ();
//以下は $p3 オブジェクトの発話メソッドにアクセスします
$p3->say(); 🎜>
出力結果は次のとおりです。
私の名前は: Zhang San 性別: 男性 私の年齢: 20
私の名前は: Li Si 性別: 女性 私の年齢: 30
私の名前は: Wang Wu 性別: 男性 私の年齢: 40 歳

コンストラクターはデフォルトの public メソッド (コンストラクターを private に設定しないでください) であるため、クラス外からアクセスできるため、コンストラクターを使用して作成することができますさらに、コンストラクターはクラス内の関数でもあるため、構築メソッドを使用してプライベート プロパティに初期値を割り当てることができます。 Say() メソッドはデフォルトでパブリックであるため、外部からアクセスすることもでき、
独自のプライベート属性を呼び出します。
上記の例から、プライベート メンバーはクラス内でのみ使用でき、クラス外から直接アクセスすることはできません
が、クラス内ではアクセスできるため、場合によっては値を割り当てる必要があることがわかります。プライベート プロパティにアクセスし、クラスの外でそれらを読み出します
。つまり、クラスの外にアクセス可能なインターフェイスを提供します。上記の例では、構築メソッドは代入
の形式ですが、構築メソッドのみです。オブジェクトの作成時に値を割り当てます。すでに既存のオブジェクトがあり、この既存のオブジェクトに値を割り当てたい場合、この時点でコンストラクター メソッドも使用して値を渡すと、
新しいオブジェクトが作成されます。 、これは既存のオブジェクトではありません。したがって、外部からアクセスできるプライベート属性用のいくつかの
インターフェイスを作成する必要があります。目的は、オブジェクトが存在するときに属性の値を変更してアクセスすることです。ただし、必要なのは外部
のみであることに注意してください。これは、変更されたプロパティに対してのみ行われ、外部からアクセスされないプロパティにはこのようなインターフェイスはありません。これにより、すべての機能が完了します。オブジェクト自体は、外部の世界にできるだけ少ない操作を提供します。
クラスの外にインターフェイスを提供する場合、クラスの外にプライベート プロパティの設定メソッドと取得メソッドを提供して、プライベート
プロパティを操作できます。たとえば、
コード スニペット


コードをコピー

コードは次のとおりです:


private $age; //プライベート属性 age
function setAge($age) {
/ /外部提供 年齢を設定するためのパブリックメソッド

if($age130) //属性に値を代入する際、不正な値が属性に設定されることを避けるためreturn; $this-> ;age=$age; } function getAge(){ // 年齢を外部から取得するための public メソッドを提供します

return($this-> age);

}


上記のメソッドは、メンバー属性の値を設定および取得するものです。もちろん、各属性に同じメソッドを使用して
を割り当てることもできます。値を取得してクラス外へのアクセスを完了します。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

メモ帳++7.3.1

メモ帳++7.3.1

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

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン