ホームページ > バックエンド開発 > PHPチュートリアル > PHP学習メモ6:オブジェクト指向PHP

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

WBOY
リリース: 2016-06-20 12:35:56
オリジナル
959 人が閲覧しました

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 開始タグ (

パブリック関数 DisplayStyles()

{

?> font-size:24pt; ;

font-family:arial,sans-serif

}

color :white; align:center;

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

}

背景:黒

}

p {

color:black; text-align:justify;

font-family:arial,sans-セリフ

}

p.foot {

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

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

}

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

color:white

}

}


10. 動的スクリプトと静的ページのどちらを使用するかを選択します

スクリプトを使用して Web ページを作成するには、単にハードディスクから静的ページをロードするだけではないため、より多くのコンピュータ プロセッサの処理操作が必要になります。次に、HTML ページがブラウザに送信されます。負荷の高い Web サイトでは、処理速度が非常に重要です。静的な HTML Web ページを使用するか、スクリプト出力をできるだけキャッシュして、サーバーへの読み込み操作を減らす必要があります。


11. PHP オブジェクト指向の定数と静的関数を理解する

1) 定数

Per-Class が提唱する考え方では、 const キーワードの場合、この定数はクラスを初期化せずに使用できます。

class Math

{

const pi = 3.14159; >

}

echo "Math::pi = ".Math::pi."n";

?>

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

クラス Math

{

静的関数 squared($input)

{

return $input*$input;

}

echo Math::squared(8);

?> > 注: 静的メソッドでは、this キーワードは使用できません。参照できるオブジェクト インスタンスが存在しない可能性があるためです。

12. クラスの型を確認します

instanceof キーワードを使用すると、オブジェクトの型を確認できます。オブジェクトが のインスタンスであるかどうかを確認できます。特定のクラスと、それが特定のクラスから継承されているかどうか、またはインターフェイスを実装しているかどうか。

instanceof は効率的な条件演算子です。

前提: クラス B はクラス A を継承します

{$b instanceof B} は true を返します、

{$b instanceof A} は true を返します、

{$b instanceof Displayable} は false を返します。クラス B は Displayable インターフェイスを実装しません。



13. PHP の型ヒント

function check_hint( B $someclass)

{

/ /...

}

注: 通常、PHP の関数にパラメーターを渡す場合、パラメーターの型を渡すことはできません。クラス タイプのヒントを使用すると、渡される必要があるパラメータのクラス タイプを指定できます。指定しないとエラーが生成されます。型チェックはinstanceofと同等です。

If check_hint( $a );

は次の致命的なエラーを生成します:

致命的なエラー: 引数 1 は B のインスタンスである必要があります

注: クラス A を指定して B のインスタンスを渡す場合、クラス B はクラス A を継承するため、エラーは生成されません。

14. 遅延静的バインディング

この機能 (遅延静的バインディング) により、静的継承のコンテキストで呼び出されたクラスへの参照が可能になります。親クラスは、子クラスによってオーバーロードされた静的メソッドを使用できます。

クラス A

{

public static function who()

{

echo __class__;

}

パブリック静的関数テスト >

}

}

クラス B は A を拡張します


{

public static function who()

{

echo __CLASS__; >

} }

}

?>

出力:

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."
";

}

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

class ObjectIteratorimplements Iterator {


private $ obj;

プライベート $count;

関数 __construct($obj)

{


$this->obj = $obj;

$this->count = count($this->
データ);

関数 rewind()

{

$this->currentIndex = 0;

}

関数 valid()

{

return $this->currentIndex < $this->count;

}

function key()

{

return $this->currentIndex;

}

function current()

{

return $this->obj->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."
";

}


?>




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 スクリプトと同様に、この機能は非常に不安定になります。

例:


require_once("page.inc");


$class = new ReflectionClass("Page");

echo "

".$class."
";


?>


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

";

} else {

echo "

";

}

}


public function DisplayFooter()

{

?>

クラス ページ

{

// クラス ページの属性

public $content;

public $title = 「TLA Consulting Pty Ltd」;

public $keywords = 「TLAコンサルティング、3文字の略語、

私の親友の何人かは検索エンジンです」;

public $buttons = array("ホーム" =>"home.php",

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

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

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

);


// class ページの操作

public function __set($name, $value)

{

$ this->$name = $value;

}


public function Display()

{

echo "nん";

$this -> DisplayTitle();

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

$this -> DisplayStyles();

echo "

nn";

$this -> DisplayHeader();

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

echo $this->content;

$this -> DisplayFooter();

echo "nn";

}


public function DisplayTitle()

{

echo "".$this ->title."";

}


public function DisplayKeywords()

{

echo "

content="".$this->キーワード。""/>";

}


public function DisplayStyles()

{

?>   

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

}

}


public function DisplayHeader()

{

?>   

cellspacing="0" border="0">

TLA Consulting Pty Ltd

}


public function DisplayMenu($buttons)

{

echo "

cellpadding="4" cellspacing="4">n";

echo "

n";


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

$width = 100/count($buttons);


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

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

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

}

echo "

n";

echo "

n";

}


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 "

".$name."

".$name."

© TLA Consulting Pty Ltd.

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

情報ページ

}

}

?>

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() メソッドを使用して印刷されます。
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート