PHPの簡単な例でカプセル化とは何ですか?
14 に答える
カプセル化は、一部のデータをオブジェクトにラップするだけです。「カプセル化」という用語は、「情報隠蔽」と同じ意味で使用されることがよくあります。ウィキペディアにはかなり詳細な記事があります。
「php encapsulation」のGoogle 検索の最初のリンクの例を次に示します。
<?php
class App {
private static $_user;
public function User( ) {
if( $this->_user == null ) {
$this->_user = new User();
}
return $this->_user;
}
}
class User {
private $_name;
public function __construct() {
$this->_name = "Joseph Crawford Jr.";
}
public function GetName() {
return $this->_name;
}
}
$app = new App();
echo $app->User()->GetName();
?>
カプセル化は、コードとそれが操作するデータを結び付け、外部の干渉や誤用から両方を保護するメカニズムです。データとメソッドを 1 つの単位 (クラスと呼ばれる) にまとめることは、カプセル化と呼ばれます。カプセル化の利点は、心配することなく内部でタスクを実行できることです。
カプセル化は、オブジェクトまたはデータを別のオブジェクト内のプロパティとして格納する方法です。これにより、外部オブジェクトは、内部データまたはオブジェクトにアクセスできる方法を完全に制御できます。
例えば
class OuterClass
{
private var $innerobject;
function increment()
{
return $this->innerobject->increment();
}
}
カプセル化されたオブジェクトの周りに追加のレイヤーがあり、外側のオブジェクトが内側のオブジェクトへのアクセス方法を制御できるようになります。これは、内側のオブジェクト/プロパティを作成することと組み合わせて、情報の隠蔽private
を可能にします。
人々は、オブジェクト指向の詳細をカプセル化と混同しているようです。カプセル化は、はるかに古く、より広い概念です。カプセル化されたデータ構造
- 単一の参照で渡すことができます。たとえば、increment(year,month,day) ではなく、increment(myDate) です。
- 単一のプログラム単位 (クラス、モジュール、ファイルなど) に格納された一連の適用可能な操作を持っている
- 該当する操作を呼び出すことを除いて、クライアントがそのサブコンポーネントを表示または操作することを許可しません
カプセル化はほとんどすべての言語で行うことができ、モジュール化と保守性の面で大きなメリットが得られます。
カプセル化は、オブジェクトのデータを外部から隠すプロセスであり、アクセスはクラスのメンバーに制限されます。
カプセル化の反対は、変数をすべてのメソッド (すべてのファイル関連メソッドへのファイル ハンドルなど) またはグローバル変数に渡すようなものです。
カプセル化: - データを単一ユニットにラッピング。また、重要な詳細の情報を隠しているとも言えます。 例:あなたは携帯電話を持っています....そこには、携帯電話とやり取りするのに役立ついくつかのインターフェースがあり、携帯電話のサービスを使用できます。しかし、携帯電話で実際に働いているのはhideです。内部でどのように機能するかわかりません。
単純に、クラスのプロパティとメソッドの可視性を優先します。例 - - パブリック - プライベート - 保護
カプセル化の実際の例を見てみましょう。
class MyClass{
private $name;
public function showName($newName){
$this->name = $newName;
return $this->name;
}
}
//instantiate object
$obj = new MyClass();
echo $obj->showName("tisuchi");
この場合、カプセル化とは、いくつかのプロパティを制限することを意味します。ネームプロパティ同様、クラス外からはアクセスできません。一方、1 つのプライベート パラメーターを使用して、showName() という名前のパブリック関数にアクセスできます。
単純にカプセル化で私が好むのは-
プロパティとメソッドの可視性。
ただし、カプセル化をさらに理解したい場合は、カプセル化に基づく特別なチュートリアルを参照してください。
http://tisuchi.com/object-directional-php-part-3-encapsulation-php/
あなたのコンセプトがより明確になることを願っています。楽しむ!
基本的には、プロパティとメソッドの可視性を定義する方法です。クラスを作成するときは、どのプロパティとメソッドがクラス外でアクセスできるかを自問する必要があります。foo という名前のプロパティがあるとします。クラスがクラスを拡張する場合、foo の操作とアクセスは許可されますか? 誰かがあなたのクラスのインスタンスを作成したら? 彼らは foo を操作してアクセスすることを許可されていますか?
カプセル化は、オブジェクト/メソッドまたはプロパティ/変数をアプリケーションで表示する方法です。例えば、 :
class ecap {
public $name;
private $id;
protected $tax;
}
プライベート プロパティまたは保護されたプロパティにアクセスする場合は、クラスの外部からアクセスできるように、クラスでゲッター メソッドとセッター メソッドを使用する必要があります。つまり、プライベートまたは保護されたプロパティにクラスの外部から直接アクセスすることはできませんが、任意のメソッドを介して使用できます。見てみましょう-
クラスに、次のメソッドを追加します。
class ecap
{
public function userId(){
return $this->id;
}
}
次のようにアクセスできます。
$obj = new ecap();
echo $obj->userId();