ホームページ  >  記事  >  バックエンド開発  >  PHP学習メモ6:オブジェクト指向PHP

PHP学習メモ6:オブジェクト指向PHP

WBOY
WBOYオリジナル
2016-06-20 12:35:56938ブラウズ

1. オブジェクト指向とクラス

オブジェクト指向プログラムでは、オブジェクトとは、格納されたデータとこれらのデータを操作するための操作メソッドの固有の識別可能なコレクションです。

カプセル化、多態性 (PHP では、クラス メンバー関数のみが多態性を持つことができ、通常の関数はサポートされません)、統合。


2. 特殊関数

例えば、コンストラクター (__construct())、デストラクター (__destruct())、set、get などはすべてdouble アンダースコア __ で始まる二重アンダースコアは、これらの関数が PHP で特別な意味を持ち、これらの関数に直接アクセスしないことを示します。


3. このポインター

クラスでは、特別なポインター $this にアクセスできます。


4. 修飾子

クラス外からプロパティにアクセスできるかどうかは修飾子によって決まります。

public: 書かれていない場合、デフォルトはこれです。パブリック プロパティまたはパブリック メソッドには、クラスの内部と外部の両方でアクセスできます。

private: プライベート プロパティとメソッドはクラス内でのみアクセスでき、プライベート プロパティとメソッドは継承されません。

protected: 保護されたプロパティとメソッドはクラス内でのみアクセスできますが、継承することはできます。


5. 継承の拡張

PHP は複数の統合をサポートしていませんが、「インターフェース」の機能があります

class B extends A

{

}


6. インターフェース

多重継承を実装する必要がある場合は、以下を使用できます。 PHP のインターフェイスは、Java などの他のオブジェクト指向プログラミング言語でサポートされているインターフェイスの実装と同様に、多重継承の問題に対する解決策と見なされます。

インターフェイスの考え方は、インターフェイスを実装するクラスが実装する必要がある一連の関数を指定することです。

例:

インターフェース Displayable

{

function display();


クラス webPage 実装 Displayable

{

関数 display()

{

//


}

}

7. サブクラスでのオーバーロード

サブクラス内で、同じ属性と操作を再度宣言することも有効です。

また、parent キーワードを使用すると、B から A::operation を呼び出すなど、親クラスの操作の初期バージョンを呼び出すことができることにも注意してください。

parent::operation(); 🎜>

8. 最後のキーワードは、継承とオーバーロードを禁止します。


は、次のように関数の前またはクラスの前に配置できます。最終関数の操作()

{...}

関数のオーバーロードは許可されていません

最終クラス A

{...}

クラスは順番にリロードされません

9. PHP の終了タグと開始タグの柔軟な処理

PHP によって処理された内容を関数本体内に表示する必要がある場合は、PHP 終了タグ (?>) を使用し、HTML を入力してから、関数本体内で PHP 開始タグ (cda00bbab35c4e67f340ba793adf0aa5

1e22bf3ae80d63bbe7158ab92e291ef0

2) 静的メソッドを実装します。 🎜 >

254b8d1e25da28ed7cb1dc43a55eae84

出力:

B


15. クローンオブジェクト

$c = clone $b;は、オブジェクト $b と同じクラスのコピーを作成し、同じ属性値を持ちます。

注: この動作を変更したい場合は、基本クラスに __clone() メソッドを追加します。このメソッドは、 clone キーワードを使用する場合には直接呼び出されないため、コンストラクターまたはデストラクターに似ています。このメソッドが呼び出されます。

オブジェクト参照を含むクラスのクローンを作成する場合は、2 番目の参照ではなく、オブジェクトの 2 番目のコピーを取得する必要がある場合があるため、__clone() メソッドをカスタマイズする必要があります。


16. 抽象クラス

抽象クラス これらのクラスはインスタンス化できず、クラス メソッドは実現されません。継承されるためにのみ使用され、各サブクラスに特定のメソッドが含まれ、オーバーロードされていることを確認してください。

抽象メソッドなど:

abstract actionX($param1, $param2);

抽象メソッドを含むクラスはそれ自体が抽象である必要があります:

抽象クラス A

{

抽象操作 > メソッドのオーバーロードは多くのオブジェクト指向プログラミング言語で非常に一般的ですが、柔軟な型と (実装が簡単な) オプションの関数パラメーターの使用に慣れているため、PHP ではあまり役に立ちません。

このメソッドを使用するには、次の例に示すように __call() メソッドを実装する必要があります。

public function __call($method, $p)

{

if ($method == "表示")

{

if (is_object($p[0]))

{

$ this-> displayObject($ p [0])); 0]));

🎜>

__call() メソッドは 2 つのパラメータを取る必要があります。最初のパラメータには呼び出されるメソッドの名前が含まれ、2 番目のパラメータにはメソッドに渡されるパラメータ配列が含まれます。 。

注: 私の理解では、display() メソッドを実装する必要はありません。他のいくつかのメソッドを実装する必要があります。

呼び出し例:

$ov = new オーバーロード;

$ov->display(array(1,2,3)); $ov->display('cat');

最初のものは displayArray() を呼び出し、2 つ目は displayScalar(); を呼び出します。

18. __autoload() メソッド

これはクラスメソッドではなく、別の関数です。この関数はクラス宣言の外で宣言できます。この関数が実装されている場合、まだ宣言されていないクラスをインスタンス化するときに自動的に呼び出されます。必要なクラスの初期化に使用されるファイルを含めるか、要求することを試みます。

例:

function __autoload($name)

{

include_once $name.".php";
}

19. イテレーターと反復の実装


PHP のオブジェクト指向エンジンは、foreach() メソッドによるループによるオブジェクトのすべての属性の取得をサポートしています。方法。例:

class myClass

{

public $a="5";

public $b="7"; >

public $c="9";

}

$x = new myClass;

foreach ($x として $attriute)

{

echo $attriute."df250b2156c434f3390392d09b1c9563";

}

より複雑な動作が必要な場合は、イテレータを実装できます。 (イテレータ)。イテレータを実装するには、IteratorAggregate インターフェイスを実装し、このクラスのインスタンスを返す getIterator メソッドを定義する必要があります。このクラスは Iterator インターフェイスを実装する必要があります。

b9cd90cb5334ab1fd90c086fed490c75currentIndex 656699388cd4dd6a267e677ebec44992obj->data[$this->currentIndex];

}

function next()

{

$this->currentIndex++;

}

}


class Object implements IteratorAggregate

{

public $data =配列();


function __construct($in)

{

$this->data = $in;

}


function getIterator()

{

return new ObjectIterator($this);

}

}


$myObject = new Object(array(2, 4, 6, 8, 10));


$myIterator = $myObject->getIterator();

for($myIterator->rewind(); $myIterator->valid(); $myIterator->next())

{

$key = $myIterator->key();

$value = $myIterator->current();

echo $key." => ".$value."df250b2156c434f3390392d09b1c9563";

}


?>




19、将类装换成字串

如果在このクラスには __toString() 関数が定義されており、そのクラスを印刷するときにこの関数が使用されます。

$p = 新しい印刷可能;

echo $p;

实现如:

class Printable()

{

public $testone;

public $testtwo;

public function __toString()

{

return(var_export($this,TRUE));

}

}

注意:var_export()関数打印出力クラス内のすべてのプロパティ値。

20、Reflection(Reflection)API を使用します

リフレクションは、既存のクラスとオブジェクトを介して、そのクラスとオブジェクトの構造と内容を取得する機能です。 >未知または不明なタイプを使用すると、コード化された PHP スクリプトと同様に、この機能は非常に不安定になります。

例:

9d437fa44d3096d2e1074192f6522403".$class."bc5574f69a0cba105bc93bd3dc13c4ec";


?>


require_once("page.inc"); $class = new ReflectionClass("ページ"); echo "e03b848252eb9375d56be284e690e873".$class."bc5574f69a0cba105bc93bd3dc13c4ec"; ?> page.inc

n";


//ボタンのサイズを計算

$width = 100/count($buttons);


while (list($name, $url) = each($buttons)) {

$this -> DisplayButton($width, $name, $url,

!$this->IsURLCurrentPage($url));

}

echo "fd273fcf5bcad3dfdad3c41bd81ad3e5n";

echo "f16b1740fad44fb09bfe928bcc527e08n";

}


public function IsURLCurrentPage($url)

{

if(strpos($_SERVER['PHP_SELF'], $url )==false)

{

false を返します。

}

else

{

true を返します。

}

}


public function

DisplayButton($width,$name,$url,$active = true)

{

if ($active) {

echo "75b54cc659af5d0e4f891f2e405fa97c

e68763ad1ad1d9b0506886d4593bccc3

29f75839e9328399e7d8433ce3f83a105db79b134e9f6b82c0b36e0489ee08ed

e68763ad1ad1d9b0506886d4593bccc36fe5c95f07804dd9269e303574e48fd7".$name."54bdf357c58b8a65c66d7c19c8e4d114 799b3f236da3860d3e9b65524a64c1b9

bc47a335f623d2c14c8084428f43b702

6fe5c95f07804dd9269e303574e48fd7".$name."54bdf357c58b8a65c66d7c19c8e4d114

b90dd5946f0946207856a8a37f441edf";

}

}


public function DisplayFooter()

{

?>

cf4ed9c61ffad636d0ee82884bd2ed85

a34de1251f0d9fe1e645927f19a896e8

b6c5a531a458a2e790c1fd6421739d1c

d3f643317b3a3c5755b6dd04f6e25e5a© TLA Consulting Pty Ltd.94b3e26ee717c64999d7867364b1b4a3

d3f643317b3a3c5755b6dd04f6e25e5a当社のfe6a2f80d4124875a12e5f756260fab0法的情報ページをご覧ください

情報ページ5db79b134e9f6b82c0b36e0489ee08ed94b3e26ee717c64999d7867364b1b4a3

b90dd5946f0946207856a8a37f441edf

fd273fcf5bcad3dfdad3c41bd81ad3e5

f16b1740fad44fb09bfe928bcc527e08

68f464a542b1615226e280b61ae44dc6

fd20c7d4a6505b08b1786ffb81ed75c5"home.php",

"連絡先" =>"contact.php",

「サービス」 " => "services.php",

「サイト マップ」 => "map.php"

);


// class ページの操作

public function __set($name, $value)

{

$ this->$name = $value;

}


public function Display()

{

echo "100db36a723c770d327fc0aef2ce13b1n93f0f5c25f18dab9d176bd4f6de5d30eん";

$this -> DisplayTitle();

$this -> 表示キーワード();

$this -> DisplayStyles();

echo "9c3bca370b5104690d9ef395f2c5f8d1n6c04bd5ca3fcae76e30b72ad730ca86dn";

$this -> DisplayHeader();

$this -> DisplayMenu($this->ボタン);

echo $this->content;

$this -> DisplayFooter();

echo "36cc49f0c466276486e50c850b7e4956n73a6ac4ed44ffec12cee46588e518a5en";

}


public function DisplayTitle()

{

echo "b2386ffb911b14667cb8f0f91ea547a7".$this ->title."6e916e0f7d1e588d4f442bf645aedb2f";

}


public function DisplayKeywords()

{

echo "bcd872ed873fd37c3849c8950a6dfc98   

h1 {

color:white; フォントサイズ:24pt; テキスト整列:中央; 

font-family:arial,sans-serif

}

.menu {

color:white; フォントサイズ:12pt; テキスト整列:中央; 

font-family:arial,sans-serif; font-weight:bold

}

td {

background:black

}

p {

色:黒; フォントサイズ:12pt; テキスト整列:両端揃え; 

font-family:arial,sans-serif

}

p.foot {

color:white; フォントサイズ:9pt; テキスト整列:中央; 

font-family:arial,sans-serif; font-weight:bold

}

a:link,a:visited,a:active {

color:white

}

531ac245ce3e4fe3d50054a55f265927

6baf5124b256fcd1617c4b5ef51b7d42

3fa337141870a4b9a175dc1d4e3e553c4bc392bc370ad1713f4580befd59a4cdb90dd5946f0946207856a8a37f441edf

b6c5a531a458a2e790c1fd6421739d1c

4a249f0d628e2318394fd9b75b4636b1TLA Consulting Pty Ltd473f0a7621bec819994bb5020d29372a

b90dd5946f0946207856a8a37f441edf

c1d9a40586aef19be999495a5c969c054bc392bc370ad1713f4580befd59a4cdb90dd5946f0946207856a8a37f441edf

fd273fcf5bcad3dfdad3c41bd81ad3e5

f16b1740fad44fb09bfe928bcc527e08

74ef8263efdbc9d21dbd829f33834b86n";

echo "

Class [  class Page ] {  @@ D:\wamp\www\study\book\Chapter 06\page.inc 2-152  - Constants [0] {  }  - Static properties [0] {  }  - Static methods [0] {  }  - Properties [4] {    Property [  public $content ] Property [  public $title ] Property [  public $keywords ] Property [  public $buttons ] } - Methods [10] { Method [  public method __set ] { @@ D:\wamp\www\study\book\Chapter 06\page.inc 16 - 19 - Parameters [2] { Parameter #0 [  $name ] Parameter #1 [  $value ] } } Method [  public method Display ] { @@ D:\wamp\www\study\book\Chapter 06\page.inc 21 - 33 } Method [  public method DisplayTitle ] { @@ D:\wamp\www\study\book\Chapter 06\page.inc 35 - 38 } Method [  public method DisplayKeywords ] { @@ D:\wamp\www\study\book\Chapter 06\page.inc 40 - 44 } Method [  public method DisplayStyles ] { @@ D:\wamp\www\study\book\Chapter 06\page.inc 46 - 74 } Method [  public method DisplayHeader ] { @@ D:\wamp\www\study\book\Chapter 06\page.inc 76 - 90 } Method [  public method DisplayMenu ] { @@ D:\wamp\www\study\book\Chapter 06\page.inc 92 - 107 - Parameters [1] { Parameter #0 [  $buttons ] } } Method [  public method IsURLCurrentPage ] { @@ D:\wamp\www\study\book\Chapter 06\page.inc 109 - 119 - Parameters [1] { Parameter #0 [  $url ] } } Method [  public method DisplayButton ] { @@ D:\wamp\www\study\book\Chapter 06\page.inc 122 - 136 - Parameters [4] { Parameter #0 [  $width ] Parameter #1 [  $name ] Parameter #2 [  $url ] Parameter #3 [  $active = true ] } } Method [  public method DisplayFooter ] { @@ D:\wamp\www\study\book\Chapter 06\page.inc 138 - 151 } } }

这里、このデータは、Reflection クラスの __toString() メソッドを使用して印刷されます。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。