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-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 キーワードを使用すると、オブジェクトの型を確認できます。オブジェクトが のインスタンスであるかどうかを確認できます。特定のクラスと、それが特定のクラスから継承されているかどうか、またはインターフェイスを実装しているかどうか。
前提: クラス B はクラス A を継承します
{$b instanceof B} は 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. 遅延静的バインディング
この機能 (遅延静的バインディング) により、静的継承のコンテキストで呼び出されたクラスへの参照が可能になります。親クラスは、子クラスによってオーバーロードされた静的メソッドを使用できます。
{
public static function who()
{
echo __class__;
}
パブリック静的関数テスト >
}
}
クラス B は A を拡張します
public static function who()
{
} }
}
?>
出力:
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."
";
}
?>
如果在このクラスには __toString() 関数が定義されており、そのクラスを印刷するときにこの関数が使用されます。
$p = 新しい印刷可能;echo $p;
实现如:
class Printable()
{
public $testone;
public $testtwo;
public function __toString()
{
}
}
注意:var_export()関数打印出力クラス内のすべてのプロパティ値。
20、Reflection(Reflection)API を使用します
例:
".$class.""; ?> page.inc
} } ?>
関連ラベル:
ソース:php.cn
前の記事:JSを使用して現在ログインしているユーザー名IDを呼び出すにはどうすればよいですか?
次の記事:Cookie の有効期間は 0 に設定されます。予期せぬ状況 (停電、プロセス終了など) が発生した後、元のブラウザを開いて Cookie がまだ存在し、その後通常の状況でブラウザを閉じると、Cookie は消去されます。
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
最新の問題
function_exists() はカスタム関数を決定できません
Function test () {return true;} if (function_exists ('test')) {echo "テストは関数です";
から 2024-04-29 11:01:01
0
3
2052
Google Chromeのモバイル版を表示する方法
こんにちは、先生、Google Chrome をモバイル版に変更するにはどうすればよいですか?
から 2024-04-23 00:22:19
0
11
2207
親ウィンドウには出力がありません
document.onclick = function(){ window.opener.document.write('私は子ウィンドウの出力です');
から 2024-04-18 23:52:34
0
1
1749
関連トピック
詳細>
|