在《PHP从入门到精通视频教程》课程中,PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域。PHP 独特的语法混合了C、Java、Perl以及PHP自创的语法。它可以比CGI或者Perl更快速地执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML(标准通用标记语言下的一个应用)文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。
课程播放地址:http://www.php.cn/course/351.html
该老师讲课风格:
讲课亲切自然,朴实无华,没有矫揉造作,也不刻意渲染,而是娓娓而谈,细细道来,师生之间在一种平等、协作、和谐的气氛下,进行默默的情感交流,将对知识的渴求和探索融于简朴、真实的教学情景之中,学生在静静的思考、默默的首肯中获得知识
本视频中较为难点是面向对象编程三大特性了:
一、封装
封装从字面上来理解就是包装的意思,专业点就是信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系。系统的其他对象只能通过包裹在数据外面的已经授权的操作来与这个封装的对象进行交流和交互。也就是说用户是无需知道对象内部的细节,但可以通过该对象对外的提供的接口来访问该对象。
对于封装而言,一个对象它所封装的是自己的属性和方法,所以它是不需要依赖其他对象就可以完成自己的操作。使用封装有三大好处:
1、良好的封装能够减少耦合。
2、类内部的结构可以自由修改。
3、可以对成员进行更精确的控制。
4、隐藏信息,实现细节。
封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法,如果不想被外界方法,我们大可不必提供方法给外界访问。但是如果一个类没有提供给外界访问的方法,那么这个类也没有什么意义了。
public class Husband { /* * 对属性的封装 * 一个人的姓名、性别、年龄、妻子都是这个人的私有属性 */ private String name ; private String sex ; private int age ; private Wife wife; /* * setter()、getter()是该对象对外开发的接口 */ public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public void setWife(Wife wife) { this.wife = wife; } }
封装可以使我们容易地修改类的内部实现,而无需修改使用了该类的客户代码。就可以对成员变量进行更精确的控制。
1. public void setAge(int age) { 2. if(age > 120){ 3. System.out.println("ERROR:error age input...."); //提示错误信息 4. }else{ 5. this.age = age; 6. } 7. }
. public String getSexName() { 2. if("0".equals(sex)){ 3. sexName = "女"; 4. } 5. else if("1".equals(sex)){ 6. sexName = "男"; 7. } 8. else{ 9. sexName = "人妖"; 10. } 11. return sexName; 12. }
二、继承
2.1 继承综述
继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。通过使用继承我们能够非常方便地复用以前的代码,能够大大的提高开发的效率。
继承所描述的是“is-a”的关系,如果有两个对象A和B,若可以描述为“A是B”,则可以表示A继承B,其中B是被继承者称之为父类或者超类,A是继承者称之为子类或者派生类。
实际上继承者是被继承者的特殊化,它除了拥有被继承者的特性外,还拥有自己独有得特性。例如猫有抓老鼠、爬树等其他动物没有的特性。同时在继承关系中,继承者完全可以替换被继承者,反之则不可以,例如我们可以说猫是动物,但不能说动物是猫就是这个道理,其实对于这个我们将其称之为“向上转型”。
確かに、継承はクラスがどのように相互に関係し、特性を共有するかを定義します。いくつかの同一のクラスまたはよく知られたクラスについては、それらの共通の動作や属性を抽象化し、それらを親クラスまたはスーパークラスとして定義し、これらのクラスを使用して親クラスを継承することができます。これらのクラスは、親クラスのプロパティやメソッドを持つだけではありません。独自の一意のプロパティやメソッドを定義することもできます。
同時に、継承を使用するときは次の 3 つの文を覚えておく必要があります:
1. サブクラスには親クラスの非プライベート属性とメソッドがあります。
2. サブクラスは独自の属性とメソッドを持つことができます。つまり、サブクラスは親クラスを拡張できます。
3. サブクラスは、独自の方法で親クラスのメソッドを実装できます。 (後で紹介します)。
継承を学習する際には、コンストラクター、保護されたキーワード、上方変換という 3 つのことが不可欠です。
2.2 コンストラクター
前の内容から、サブクラスはプライベートなものに加えて、親クラスの属性とメソッドを継承できることがわかりました。 、同じものもあります。それはサブクラスが継承できないものです --- コンストラクター。コンストラクターは呼び出すことのみが可能で、継承することはできません。 親クラスのコンストラクター メソッドを呼び出すには、super() を使用できます。
構築プロセスは親クラスから「外向き」に広がります。つまり、親クラスから開始され、サブクラスに向かって段階的に構築が完了します。また、親クラスのコンストラクターを明示的に参照しませんでした。これが Java の賢い点です。コンパイラーは、デフォルトでサブクラスの親クラスのコンストラクターを呼び出します。
ただし、親クラスのコンストラクターへのこのデフォルトの呼び出しには前提条件があります。親クラスにはデフォルトのコンストラクターがあるということです。親クラスにデフォルトのコンストラクターがない場合は、明示的に super() を使用して親クラスのコンストラクターを呼び出す必要があります。そうしないと、コンパイラーは「親クラスの形式に一致するコンストラクターが見つかりません」というエラーを報告します。
サブクラスの場合、そのコンストラクターの正しい初期化は非常に重要であり、これを保証できるメソッドが 1 つしかない場合に限ります。コンストラクター内で親クラスのコンストラクターを呼び出して初期化を完了し、親クラスのコンストラクターには All が含まれます。親クラスの初期化を実行するために必要な知識と能力。
継承の場合、サブクラスはデフォルトで親クラスのコンストラクターを呼び出しますが、デフォルトの親クラスのコンストラクターがない場合、サブクラスは親クラスのコンストラクターを明示的に指定する必要があり、それが子クラスのコンストラクター内にある必要があります。 do (コードの最初の行)。
2.3 protected キーワード
プライベート アクセス修飾子はカプセル化に最適な選択ですが、これは理想的な世界に基づいているだけです。時々、このような要件が必要になります。特定のものを可能な限り安全にする必要があります。この世界は隠されています。ただし、サブクラスのメンバーは引き続きアクセスを許可されます。現時点では、protected を使用する必要があります。
protected の場合、クラス ユーザーに関する限りプライベートであることを示しますが、このクラスを継承するサブクラスまたは同じパッケージ内にある他のクラスからはアクセス可能です。
2.4 上方変換
上記の継承では、is-a 関係としての継承について説明しました。猫の継承は動物に関連しているため、猫は動物である、または猫は動物の一種であると言えます。このように猫を動物として考えることは、上向きに変容することです。
3. ポリモーフィズム
3.1 ポリモーフィズムの概要
いわゆるポリモーフィズムとは、プログラム内で定義された参照変数が指す特定の型と、参照変数を介して発行されるメソッド呼び出しが、プログラミング中に決定されるのではなく、プログラム中に決定されることを意味します。プログラム 参照変数がどのクラスのインスタンス オブジェクトを指すかは、実行時に決定されます。参照変数によって発行されるメソッド呼び出しは、どのクラスに実装されるかが決定されます。特定のクラスはプログラムの実行時にのみ決定されるため、ソース プログラム コードを変更せずに参照変数をさまざまなクラス実装にバインドでき、参照によって呼び出される特定のメソッドがそれに応じて変更されます。つまり、参照変数は変更する必要がありません。プログラム コードは、実行中にプログラムにバインドされている特定のコードを変更することができ、これによりプログラムが複数の実行状態を選択できるようになります。
したがって、ポリモーフィズムは次のように要約できます:
サブクラスを指す親クラス参照の上方変換により、親クラスが所有するメソッドとプロパティ、およびサブクラスに存在するメソッドとプロパティにのみアクセスできます。親クラスのメソッドに存在しない場合、メソッドをオーバーロードしているにもかかわらず、この参照は使用できません。サブクラスが親クラスの一部のメソッドをオーバーライドする場合、これらのメソッドを呼び出すときは、サブクラスで定義されたメソッド (動的接続、動的呼び出し) を使用する必要があります。
オブジェクト指向の場合、ポリモーフィズムはコンパイル時ポリモーフィズムと実行時ポリモーフィズムに分けられます。このうち、編集時のポリモーフィズムは、主にメソッドのオーバーロードを指します。編集後は、実行時に 2 つの異なる関数になります。実行時のポリモーフィズムは動的であり、動的バインディングによって実現されます。これをポリモーフィズムと呼びます。
3.2 ポリモーフィズムの実装条件
冒頭で、継承によってポリモーフィズムの実装が準備されると述べました。サブクラス Child は親クラス Father を継承します。同じメッセージがサブクラスまたは親に送信される場合、この参照は親クラスの Father オブジェクトまたはサブクラスの Child オブジェクトのいずれかを処理できます。クラス オブジェクトが使用されると、そのオブジェクトは、そのオブジェクトが属する参照に応じて異なる動作を実行します。これがポリモーフィズムです。つまり、ポリモーフィズムとは、同じメッセージが異なるクラスに異なる応答を引き起こすことを意味します。
Java がポリモーフィズムを実現するには、継承、書き換え、上方変換という 3 つの条件が必要です。
継承: ポリモーフィズムでは、継承関係を持つサブクラスと親クラスが存在する必要があります。
書き換え: サブクラスは親クラスの特定のメソッドを再定義し、これらのメソッドが呼び出されるときに、サブクラスのメソッドが呼び出されます。
上方変換: ポリモーフィズムでは、サブクラスの参照を親クラスのオブジェクトに割り当てる必要があります。この方法でのみ、参照は親クラスのメソッドとサブクラスのメソッドを呼び出すことができます。
上記の 3 つの条件が満たされた場合にのみ、統一されたロジックを使用して、同じ継承構造内の異なるオブジェクトを処理し、異なる動作を実行するコードを実装できます。
Java の場合、そのポリモーフィック実装メカニズムは 1 つの原則に従います。スーパークラス オブジェクト参照変数がサブクラス オブジェクトを参照する場合、参照変数の型ではなく、参照されるオブジェクトの型によって、どのメンバー メソッドが呼び出されるかが決まりますが、このメソッドは呼び出されるメソッドはスーパークラスで定義されている必要があります。つまり、サブクラスによってオーバーライドされるメソッドです。
3.3 実装形式
Java でポリモーフィズムを実現するには、継承とインターフェイスの 2 つの形式があります。
3.2.1. 継承に基づくポリモーフィズム
継承に基づく実装メカニズムは、主に、親クラスおよび親クラスを継承する 1 つ以上のサブクラスによる特定のメソッドの書き換え、および同じメソッドの書き換えに反映されます。複数のサブクラスは異なる動作を示す可能性があります。
継承に基づいて実装されるポリモーフィズムは次のように要約できます。 サブクラスを参照する親クラス型の場合、その参照を処理するときに、親クラスを継承するすべてのサブクラスに適用されます。メソッドの実装も異なります。それらは異なり、同じアクションを実行することによって生成される動作も異なります。
親クラスが抽象クラスの場合、サブクラスは親クラスのすべての抽象メソッドを実装する必要があります。このように、親クラスのすべてのサブクラスは統一された外部インターフェイスを持つ必要がありますが、内部固有の実装は異なる場合があります。このようにして、トップレベルのクラスによって提供される統合インターフェイスを使用して、このレベルのメソッドを処理できます。
3.2.2. インターフェース実装に基づくポリモーフィズム
継承は、親クラスの同じメソッドをオーバーライドするいくつかの異なるサブクラスによって具体化され、インターフェースを実装し、同じメソッドのいくつかの異なるサブクラスをオーバーライドすることで実現できます。インターフェースが反映されます。
インターフェイスのポリモーフィズムでは、インターフェイスを指す参照は、インターフェイスを実装するクラスを指定するインスタンス プログラムでなければなりません。実行時には、オブジェクト参照の実際の型に従って、対応するメソッドが実行されます。
継承は単一継承であり、関連するクラスのグループに対して一貫したサービス インターフェイスのみを提供できます。ただし、インターフェイスは複数の継承と複数の実装を持つことができ、関連するインターフェイスまたは無関係なインターフェイスのセットを使用して結合および拡張でき、一貫したサービス インターフェイスを外部に提供できます。そのため、継承よりも柔軟性に優れています。
以上が入門から習得までの PHP ビデオ チュートリアルの推奨リソースの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。