この記事では主に PHP オブジェクト指向プログラミングの基礎 (2) について説明します。これには一定の学習価値があります。興味のある友人はそれについて学ぶことができます。
一部の小規模プロジェクトでは、クラスの継承、カプセル化、ポリモーフィズムなどの機能に頻繁に触れたり、クラス自体の機能を使用したりすることがあります。
しかし、大規模なプロジェクトでは、クラス インターフェイスが実装に使用されることがよくあります。これは、インターフェイスにはクラスの特定の機能の実装が含まれないためですが、インターフェイスによってクラスの機能が制限されるためです。
複雑で大規模なソフトウェアは、多数の機能クラスで構成される必要があります。これらの機能クラスは複数のプログラマによって完成される必要があります。その中で、ソフトウェア アーキテクトは、関与するモード、チーム分業を指定する必要がありますおよびその他のタスク。
これは、プログラミングの統一性の問題を引き起こします。主要な機能を適切に実装するには、あらゆる側面を考慮できる設計インターフェイスが必要です。PHP では多くのメソッドを使用できますが、通常はクラス インターフェイスが使用されます。
クラスのカプセル化、基盤、ポリモーフィズムなどの機能はすべてクラスの機能に関係しており、通常はクラス関数を使用して小規模なプロジェクトに実装されます。
しかし、大規模なプロジェクトでは、ソフトウェアに多くの機能が必要となり、多くの機能クラスが必要になります。これらの機能クラスは通常、複数のプログラマによって完成されるため、多数のプログラマの間で統一プログラミングの問題が発生します。 . ソフトウェアの機能を確実に実現するにはどうすればよいでしょうか?
これには、ソフトウェア設計前に一連の関数を事前に定義し、プログラマーがこれらの関数を 1 つずつ実装する必要があります。
PHP では使用できるメソッドが多数あり、通常はクラス インターフェイスを使用して実装されます。一連の関数はインターフェイスで定義されますが、関数の実装にはプログラマが 1 つずつ実装する必要があるため、ソフトウェア関数の整合性が確保されます。
1. インターフェースの定義
インターフェースは関数クラスではないため、インターフェースクラス内に特定の機能実装メソッドを定義することはできません。
インターフェイスを定義するときは、interface キーワードを使用します。命名形式は次のとおりです: I インターフェイス名。
通常、インターフェイスで定義されるメンバーは関数クラスのメソッドである必要があり、関数クラスのメンバー属性にすることはできません。
注意すべき点:
① インターフェイス メンバーはグローバル アクセス権限を持っている必要があるため、アクセス修飾子を追加できません;
② インターフェイス メンバーは定数、静的メソッド、 etc. Properties;
③インターフェースメンバーはコンストラクターを定義できません。
④インターフェースはクラスと同様に継承することができ、継承後、サブインターフェースは親インターフェースのすべてのメンバーを取得します。
2. インターフェースの実装
インターフェースは関数を定義することしかできませんが、特定の関数を実装することはできません。インターフェースで定義された関数を実現したい場合は、通常の関数クラスを使用して実装する必要があります。 。
形式: インターフェイス名を実装します。
注: インターフェイス内のすべてのメンバー メソッドは関数クラスで定義する必要があり、どれも省略することはできません。
以下は簡単な例で示されています
インターフェース ファイルで、2 つのインターフェース Imyinterce、Imys (Imyinterface サブインターフェース)
<?php /** * 定义接口Imyinterface */ interface Imyinterface{ function add1(); function add2($s); function add3($t=0); } //接口的继承 interface Imys extends Imyinterface{ function del(); function edit(); function update($str); function select($id,$str); } ?>
次に、インターフェースを実装するための関数クラスを定義します。関数の実装方法がわからない場合は、空のメソッドを使用して実装できます。省略することはできません。省略しない場合は、エラーが報告されます。関数クラスには抽象メソッドが含まれており、これを実装する必要があります。
ここでは、サブインターフェイス Imy の update メソッドと select メソッドのみが実装されています。他のメソッドはまだ実装されておらず、代わりに空のメソッドが使用されます。
<?php require "./Imyinterface.interface.php"; class MyClass implements Imys{ function add1(){ //空方法,暂无具体实现方法,虽然功能类继承Imys,但是接口Imys又继承Imyinterface,因此Imyinterface里的方法也必须要实现 } function add2($str){ //同上 } function add3($t=0){ //同上 } function del(){ //空方法,暂无具体实现方法 } function edit(){ //空方法,暂无具体实现方法 } function update($str="字符串"){ return $str; } function select($id=0,$str="字符串"){ return $id.$str; } } ?>
テストコード
<?php require "./MyClass.class.php"; header("Content-type:text/html;charset=utf-8"); $mys =new MyClass(); echo $mys->select(); ?>
ブラウズ効果
上記は、大規模な手順の標準化と統一のプロセスを紹介しています。ソフトウェア設計、通常はインターフェイスを使用します。ただし、インタフェースはプログラムの抽象的な関数を定義することしかできず、特定の機能を提供するものではなく、定数や静的プロパティなどの通常のクラスメンバを定義することはできません。
抽象クラスはクラスの継承用に設計されています。通常のクラス メンバーは抽象クラスで定義できます。この時点で、抽象クラスはインターフェイスよりもはるかに柔軟です。
抽象クラスを定義する場合は、abstract キーワードを追加して、抽象クラスに通常のメンバー メソッドを定義する必要がありますが、この通常のメソッドには特定の関数コードは必要ありません。
ほとんどの MVC フレームワークは、PHP 抽象クラスを使用して構築されています。抽象クラスは、単純に通常のクラスとインターフェイスの組み合わせ、つまり、abstract=class インターフェイスとして理解できます。
インターフェースと抽象クラスの共通点:
① インターフェースも抽象クラスもインスタンス化できない インターフェースはimplementsキーワードで実装する必要があるが、抽象クラスは通常クラスのextendsキーワードを使う継承します。 。
② インターフェースと抽象クラスの両方に、まだ実装されていないメソッド宣言が含まれています。
③ 派生クラスは未実装のメソッドを実装する必要がある 抽象クラスは抽象メソッドであり、インターフェイスはすべてメンバーです。
インターフェースと抽象クラスの違い:
①抽象クラスはシールできませんが、インターフェースはシールできます。
②抽象クラスで実装される具象メソッドはデフォルトでは仮想ですが、インターフェースを実装するクラスメソッドはデフォルトでは実数です。
③抽象クラスは、実装クラスが実装できるように、クラスの基本クラス リストにすべてのメンバーをリストする必要がありますが、インターフェイスでは空のメソッドが許可されます。
インターフェイスと抽象クラスの概念を理解した後、抽象クラスの定義と実装を詳しく見てみましょう。
在PHP中,抽象类不能为空类或普通类,至少需要提供一个抽象方法,而抽象类和抽象方法都需要关键字abstract。
例如,定义一个简单的CURD抽象类(数据库的增删改查)
<?php /** * 抽象类的定义 */ abstract class BaseClass{ //查询,抽象方法 abstract function query($sql); //插入,抽象方法 abstract function insert($sql); //更新,抽象方法 abstract function update($sql); //删除,抽象方法 abstract function delete($sql); //数据库连接,普通类方法 protected $link; //sql语句 protected $sql; //结果 protected $arr; protected function Conn(){ $this->link=mysql_connect("localhost","root","123") or die("数据库连接失败").mysql_error(); if($this->link){ mysql_select_db("db_match",$this->link) or die("数据库选择失败").mysql_error(); } return $this->link; } //关闭数据库连接,普通类方法 protected function CloseConn(){ mysql_close($this->link); } } ?>
抽象类的实现
<?php require "./BaseClass.class.php"; //引入抽象类 /** * 实现抽象类 */ class MyClass extends BaseClass { //实现抽象中的抽象方法,抽象类中抽象方法:query()、insert()、update()、delete() function query($sql){ $this->Conn($this->link); $this->sql=$sql; $result=mysql_query($this->sql); while($row=mysql_fetch_assoc($result)){ $this->arr=$row; } $this->CloseConn($this->link); //关闭连接 return print_r($this->arr); } function insert($sql){ $this->Conn($this->link); $this->sql=$sql; mysql_query($this->sql,$this->link); $this->CloseConn($this->link); //关闭连接 } function update($sql){ $this->Conn($this->link); $this->sql=$sql; mysql_query($this->sql,$this->link); $this->CloseConn($this->link); //关闭连接 } function delete($sql){ $this->Conn($this->link); $this->sql=$sql; mysql_query($this->sql,$this->link); $this->CloseConn($this->link); //关闭连接 } } ?>
测试代码
<?php require "./MyClass.class.php"; header("Content-type:text/html;charset=utf-8"); $mys =new MyClass(); $mys->query("select * from `match`"); //输出结果:Array ( [m_id] => 8 [t1_id] => 5 [t2_id] => 6 [t1_score] => 2 [t2_score] => 1 [m_time] => 1421571600 ) $mys->insert("insert into `match`(m_id,t1_id,t2_id,t1_score,t2_score,m_time) values(9,5,3,3,3,1451571600)"); //添加成功 $mys->update("update `match` set m_time =1111111111 where m_id=9"); //修改成功 $mys->delete("delete from `match` where m_id=9"); //删除成功 ?>
相关教程:PHP视频教程
以上がPHP のオブジェクト指向プログラミングの基礎について話しましょう (2)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。