ホームページ  >  記事  >  バックエンド開発  >  PHP クラスのカプセル化と継承について

PHP クラスのカプセル化と継承について

墨辰丷
墨辰丷オリジナル
2018-06-07 10:39:101125ブラウズ

この記事では主に PHP クラスのカプセル化と継承について紹介します。興味のある方はぜひ参考にしてください。

カプセル化

メンバーメソッドとメンバープロパティをクラスにカプセル化し、プロパティとメソッドの実装の詳細を非表示にし、public、protected、private などを通じてクラスメンバーのアクセス権を制限します。データは保護されます。内部的にアクセスでき、承認されたユーザーのみがアクセスできます。メンバー メソッドのみを操作でき、メンバーは可能な限りカプセル化する必要があります。

public: メソッドまたはプロパティは任意のスコープでアクセスでき、プロパティまたはメソッドにアクセス修飾子が指定されていない場合、デフォルトでパブリックになります。
protected: このクラスとサブクラスにはアクセスできますが、外部オブジェクトを呼び出すことはできません。
private: はこのクラス内でのみアクセスでき、サブクラスや外部オブジェクトから呼び出すことはできません。プライベートとしてマークされたメソッドまたは属性は、継承されたクラスで再定義できます。各クラスは、独自に定義されたプライベート メソッドのみを参照できます。

これら 3 つの修飾子は、スコープの観点から大きいものから小さいものへと並べ替える必要があります: public → protected → private スコープ内であると言われる理由は、クラスがいくつかの属性とメソッドをカプセル化するためです。このカプセル化は「可視性」を決定します。そのため、定義されたプロパティやメソッドをクラスの外で自由に変更することはできず、呼び出しのみが可能です。これはカプセル化の利点であり、セキュリティも向上します。
コード例を示します:

 class myClass{ 
  public $public="Public";    //public属性
  protected $protected="Protected"; //protected属性
  private $private="Private";   //private 属性
  function say_Hello() {    //public属性 
  //只是举例说明,自行添加内容
  } 
 
 $obj=new myClass(); 
 echo $obj->public; 
 //echo $obj->protected; 
 //echo $obj->private;

上記の例を実行すると「Public」が取得されますが、//echo $obj->private; のコメントを削除すると、次のエラーが表示されます:

致命的なエラー: E:apachehtdocsexamplefile.php の 13 行目で保護されたプロパティ myClass::$protected にアクセスできません。

クラスの属性定義に自由にアクセスできないことがわかります。このクラスのメンバーは他のクラスでは使用できない可能性があるため、「外部」ではわかりません。もちろん、「プライベート」として定義された属性にアクセスまたは変更する必要がある場合は、PHP が提供するシステム メソッド _get() および _set() を使用することもできます。

継承

クラスを継承させ、別の既存のクラスのメンバーのプロパティとメソッドを持たせることができます。継承されたクラスは親クラスまたは基本クラスと呼ばれ、継承されたクラスはサブクラスと呼ばれます。継承関係は、extends キーワードによって実装されます。一般に相続をするには「根」が必要ですが、この「根」については、将来息子や娘が生まれた場合に何らかの「物(財産や方法)」を手に入れることができると想像するかもしれません。したがって、あなたの「子孫」は、あなた(ソース)の特徴のいくつかを備えている人々になります。

「ルート」クラス(親クラスまたは基本クラス)を生成します構文: class Father{
}

「子孫」(サブクラス)を生成する構文: class Son extends Father{
}

PHP extends class継承 サンプルコード:

class father{ 
 protected $name; 
 function __construct($name){  //构造函数 
  $this->name=$name; 
 } 
 
 function work(){ 
  echo "{$this->name}我在工作;
 } 
 function __destruct(){}  //析构函数
} 
 
class son extends father{  //继承父类
 function play(){ 
  echo "{$this->name}我在玩游戏;
 }  
} 
 
 $my_father=new father(“爸爸”);  //创建父类对象
 $my_father->work(); 

 $my_son=new son(“儿子”); 
 $my_son->work(); 
 $my_son->play();

分析: 親クラスの父で、一般的な属性とメソッドを定義し、次にサブクラスを定義します。サブクラスは親クラスのすべてのメソッドを継承するため、サブクラスにはコンストラクターとデストラクターが存在しないことがわかります。したがって、 $my_son->work(); を呼び出すことができます。これは PHP クラスの継承です。また、PHP では、クラス A が B を拡張し、C を拡張するなどの複数レベルの継承を行うことはできません。PHP ではこのような継承は無効です。多重継承を「実装」するには、他のメソッドは必要ありません。変装した。

要約: 上記がこの記事の全内容です。皆様の学習に役立つことを願っています。

関連する推奨事項:

PHP で数値をランダムに生成する 2 つの方法

PHP はその日のゼロ時間のタイムスタンプを取得しますインスタンス分析

PHP データ エクスポートのケース分析

以上がPHP クラスのカプセル化と継承についての詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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