ホームページ >バックエンド開発 >PHPチュートリアル >PHP でのオブジェクト指向プログラミングの実装_PHP チュートリアル

PHP でのオブジェクト指向プログラミングの実装_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 17:19:45890ブラウズ

  这篇文章介绍在PHP的面向对象编程(OOP)。我将演示如何用面向对象的概念编出较少的代码但更好的程序。祝大家好运。

  面向对象编程的概念对每一个作者来说都有不同的看法,我提醒一下一个面向对象语言应有的东西:

   - 数据抽象和信息隐藏
   - 继承
   - 多态性

  在PHP中使用类进行封装的办法:

class Something {
// In OOP classes are usually named starting with a cap letter.
var $x;

function setX($v) {
// Methods start in lowercase then use lowercase to seprate
// words in the method name example getValueOfArea()
$this->x=$v;
}

function getX() {
return $this->x;
}
}

?>

  当然你可以用你自己的办法,但有一个标准总是好的。

  PHP中类的数据成员使用 "var" 定义,数据成员是没有类型直到被赋值。一个数据成员可能是一个 integer、数组、联合数组(associative array)或甚至对象(object). 方法在类里定义成函数,在方法里存取数据成员,你必须使用$this->name 这样的办法,否则对方法来说是一个函数的局部变量。

  使用 new 来创建一个对象

$obj = new Something;

  然后使用成员函数

$obj->setX(5);
$see = $obj->getX();

  setX 成员函数将 5 赋给对象(而不是类)obj 中成员变量, 然后 getX 返回值 5.

  你也可以用对象引用来存取成员变量,例如:$obj->x=6; 然而,这不一种好的面向对象编程的方法。我坚持你应使用成员函数来设置成员变量的值和通过成员函数来读取成员变量。如果你认为成员变量是不可存取的除了使用成员函数的办法,你将成为一个好的面向对象程序员。 但不幸的是PHP本身没有办法声明一个变量是私有的,所以允许糟糕的代码存在。

  在 PHP 中继承使用 extend 来声明。

class Another extends Something {
 var $y;
 function setY($v) {
  // Methods start in lowercase then use lowercase to seperate
  // words in the method name example getValueOfArea()
  $this->y=$v;
 }

 function getY() {
  return $this->y;
 }
}

?>

  这样类 "Another" 的对象拥有父类的所用成员变量及方法函数,再加上自己的成员变量及成员函数。如:

$obj2=new Another;
$obj2->setX(6);
$obj2->setY(7);

  多重继承不被支持,所以你不能让一个类继承多个类。

  在继承类中你可以重新定义来重定义方法,如果我们在 "Another" 重新定义 getX,那么我们不再能存取 "Something" 中的成员函数 getX. 同样,如果我们在继承类中声明一个和父类同名的成员变量,那么继承类的变量将隐藏父类的同名变量。

  你可以定义一个类的构造函数, 构造函数是和类同名的成员函数,在你创建类的对象时被调用。

class Something {
 var $x;

 function Something($y) {
  $this->x=$y;
 }

 function setX($v) {
  $this->x=$v;
 }

 function getX() {
  return $this->x;
 }
}

?>

本新闻共4页,当前在第1页  1  2  3  4  

 所以可以用如下方法创建对象:

$obj=new Something(6);

  构造函数自动赋值 5 给成员变量 x, 构造函数和成员函数都是普通的PHP函数,所以你可以使用缺省参数。

function Something($x="3",$y="5")

それでは、

$obj=new Something(); // x=3 および y=5
$obj=new Something(8); // x=8 および y=5
$obj=new Something(8,9); / x=8 and y=9

デフォルトパラメータの定義方法はC++と同じなので、Yに値を渡すことはできませんが、Xにはデフォルト値をとらせます 実際のパラメータは左から右に渡されます。いつ 引数がない場合、関数はデフォルトのパラメータを使用します。

継承クラスのコンストラクタが呼び出されたときのみ、継承クラスのオブジェクトが作成され、親クラスのコンストラクタは呼び出されないのがPHPの特徴です。コンストラクター呼び出しチェーンはオブジェクト指向プログラミングの専門分野です。基本クラスのコンストラクターを呼び出したい場合は、継承クラスのコンストラクターで明示的に呼び出す必要があります。これが機能するのは、親クラスのすべてのメソッドが継承されたクラスで使用できるためです。

オブジェクト指向プログラミングの場合優れたメカニズムは、抽象クラスを使用することです。抽象クラスはインスタンス化できないクラスですが、継承されたクラスのインターフェイスを定義するために使用されます。デザイナーは、プログラマーに特定の基本クラスからのみ継承させるために抽象クラスをよく使用します。これにより、新しいクラスに必要な機能があることを確認できますが、PHP にはこれを行う標準的な方法はありません。この機能は、基本クラスを定義するときに、コンストラクターで「die」を呼び出すことで実行できます。これにより、抽象クラスの関数を定義し、各関数で「die」を呼び出すことができます。 in 継承クラスのプログラマが基本クラスの関数を再定義せずに直接呼び出すとエラーが発生します。
function Another() {
$this->y=5;
$this->Something(); //基本クラスのコンストラクターへの明示的な呼び出し

?>

さらに、PHP には型がないため、一部のオブジェクトは基本クラスを継承する継承クラスから作成されることを確認する必要があるため、クラスを識別するメソッド (「何らかの ID」を返す) を基本クラスに追加し、使用するパラメータとしてオブジェクトを受け取るときに、これを確認してください。 しかし、不正なプログラムに対する解決策はありません。不正なプログラムは継承されたクラスでこの関数を再定義できるため、通常、この方法は怠惰なプログラマにしか機能しません。もちろん、最善の方法は、プログラムが基本クラスのコードに触れないようにして、インターフェイスのみを提供することです。

PHPではオーバーロードはサポートされていません。オブジェクト指向プログラミングでは、異なるパラメーターの型と数値を定義することによって、同じ名前のメンバー関数をオーバーロードできます。 PHP は型付けが緩い言語であるため、パラメーターの型のオーバーロードは役に立ちません。同様に、異なる数のパラメーターを使用したオーバーロードも機能しません。

オブジェクト指向プログラミングでは、コンストラクターをオーバーロードすると、さまざまな方法 (さまざまな数のパラメーターを渡すこと) でさまざまなオブジェクトを作成できる場合に便利です。小さなドアがまさにそれを可能にします:





class Myclass { function Myclass() { $name="Myclass".func_num_args(); //$this->$name() は通常は間違っていることに注意してください。
//$name は呼び出すメソッドの名前を含む文字列です
}

function Myclass1($x) {
code;
function Myclass2($x,$y) {
}
}

?>




オーバーロードの目的は、このメソッドによって部分的に達成できます。

$obj1=new Myclass(1); //Myclass1 を呼び出します
$obj2=new Myclass(1,2) //Myclass2 を呼び出します

現在、このニュースには合計 2ページ 1 2
4
ページがありますページ上
3 4

ポリモーフィズム
ポリモーフィズムは、実行時にオブジェクトがパラメーターとして渡されたときに、どのメソッドを呼び出すかを決定するオブジェクトの機能として定義されます。 。たとえば、クラスはメソッド "draw" を定義し、継承されたクラスは円または正方形を描画するために "draw" の動作を再定義します。これにより、パラメータ x を持つ関数が作成され、その中で $x を呼び出すことができます。 ->draw() ポリモーフィズムがサポートされている場合、「draw」メソッドの呼び出しはオブジェクト x のタイプに依存します。 PHP ではポリモーフィズムが当然サポートされています (この状況について考えてみてください

http://www.bkjia.com/PHPjc/532649.htmlwww.bkjia.com

tru​​e

http://www.bkjia.com/PHPjc/532649.html

この記事では、PHP のオブジェクト指向プログラミング (OOP) について紹介します。オブジェクト指向の概念を使用して、より少ないコードでより優れたプログラムを作成する方法を示します。皆さんの幸運を祈ります。 オブジェクト指向プログラミングの入門...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。