ホームページ > バックエンド開発 > PHPチュートリアル > PHPオブジェクト指向の基礎知識まとめ_PHPチュートリアル

PHPオブジェクト指向の基礎知識まとめ_PHPチュートリアル

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
リリース: 2016-07-13 17:52:42
オリジナル
870 人が閲覧しました

最近、PHP エンジニアとの面接に何回か参加しましたが、筆記試験の質問に対する答えが満足のいくものではありませんでした。 帰ってきたら、失敗の理由を自分が PHP のマニュアルを読んでいなかったからだとまとめました。いくつかの企業からの PHP の基本的な面接の質問は、PHP マニュアルに記載されています。そうですね、最高の面接ガイドは PHP マニュアルであることがわかりました。
以下は、PHP5.1 マニュアルからの PHP オブジェクト指向の基本の一部の抜粋です。
1. クラスの変数メンバーは「プロパティ」、「フィールド」、または「機能」と呼ばれ、このドキュメントでは総称して「プロパティ」と呼ばれます。
2. 属性内の変数は初期化できますが、初期化された値は定数である必要があります。ここでの定数とは、php スクリプトがコンパイル段階では定数であることを意味し、
ではありません。 コンパイルフェーズ後のランタイムフェーズ中に評価される定数。
3. クラスのメンバーメソッドでは、$this->property (property はプロパティ名) を通じてクラスのプロパティとメソッドにアクセスできますが、
クラスまたは静的メソッド内の静的プロパティにアクセスするには、代わりに self::$property を使用します。
4. クラスの非静的メソッドで疑似変数 $this を使用できます。この疑似変数は、メソッドを呼び出すインスタンス化されたオブジェクトへの参照です
。 5. 定数の値は固定値である必要があり、変更は許可されません。また、変数、クラス属性、またはその他の操作 (関数呼び出しなど) の結果であってはなりません。
クラスMyClass
{
const 定数 = '定数値';
関数 showConstant() {
エコー self::constant . "n";
}
}
echo MyClass::constant . "n";
$n=new MyClass();
$n->showConstant();
?>
6. コンストラクター クラスは、オブジェクトを作成するたびに最初にこのメソッドを呼び出すため、オブジェクトを使用する前に初期化作業を行うことが非常に適しています。
コンストラクターがサブクラスで定義されている場合、その親クラスのコンストラクターは暗黙的に呼び出されません。親クラスのコンストラクターを実行するには、サブクラスのコンストラクター内にいる必要があります
parent::__construct() を呼び出します。
7. デストラクターは、オブジェクトへのすべての参照が削除されるか、オブジェクトが明示的に破棄されるときに実行されます。
親クラスのデストラクターは、エンジンによって暗黙的に呼び出されません。親クラスのデストラクターを実行するには、子クラスのデストラクター本体で明示的に呼び出す必要があります
親::__destruct()。
デストラクターは、すべてのヘッダー情報が出力された後、スクリプトが閉じられるときに呼び出されます。
デストラクターで例外をスローしようとすると、致命的なエラーが発生します。
8. クラスを拡張すると、サブクラスは親クラスのすべての public メソッドと protected メソッドを継承します。ただし、サブクラスのメソッドは親クラスのメソッドをオーバーライドします。
9. 範囲解決演算子 (::)。静的メンバー、メソッド、定数へのアクセスに使用できます
クラスの外部からこれらの静的メンバー、メソッド、および定数にアクセスする場合は、クラス名を使用する必要があります。
self とparent の 2 つの特別なキーワードは、クラス内のメンバーまたはメソッドにアクセスするために使用されます。
10. サブクラスが親クラスのメソッドをオーバーライドすると、PHP は、オーバーライドされたメソッドがサブクラスで呼び出されるまで、親クラスでオーバーライドされたメソッドを実行しなくなります。これ
このメカニズムは、コンストラクターとデストラクター、オーバーロードされた関数、およびマジック関数でも機能します。
11. 静的変数とメソッド
クラスのメンバーまたはメソッドを静的として宣言すると、クラスをインスタンス化せずに直接アクセスできます。静的メンバー (静的メソッド) にはオブジェクトを通じてアクセスできません
を除外する)。
静的メソッドではオブジェクトを呼び出す必要がないため、静的メソッドでは疑似変数 $this を使用できません。
-> 演算子を使用してオブジェクトから静的プロパティにアクセスすることはできません。
:: メソッドを使用して非静的メソッドを呼び出すと、E_STRICT レベルのエラーが発生します。
他のすべての PHP 静的変数と同様、静的プロパティは式ではなく文字値または定数にのみ初期化できます。 だから、できます
静的プロパティを整数または配列に初期化することはできますが、別の変数や関数の戻り値、またはオブジェクトを指すことはできません。

12. 「可視性」が指定されていない場合、プロパティとメソッドはデフォルトで public になります。
13.抽象クラス
抽象クラスを直接インスタンス化することはできません。最初に抽象クラスを継承してから、サブクラスをインスタンス化する必要があります。抽象クラスには、少なくとも 1 つの抽象メソッドが含まれている必要があります。もし
クラス メソッドは抽象として宣言されているため、具体的な関数実装を含めることはできません。
抽象クラスを継承する場合、サブクラスは抽象クラス内のすべての抽象メソッドを実装する必要があり、さらに、これらのメソッドの可視性は抽象クラス内と同じである必要があります (
)。 または緩い)。抽象クラスの抽象メソッドが保護されていると宣言されている場合、サブクラスに実装されているメソッドも保護されていると宣言する必要があります
またはパブリックですが、プライベートとして定義することはできません。
応用例:
抽象クラス AbstractClass
{
// サブクラスにこれらのメソッドを強制的に定義させる
抽象保護関数 getValue();
抽象保護関数 prefixValue($prefix);
// 通常のメソッド(非抽象メソッド)
パブリック関数 printOut() {
print $this->getValue() "n";
}
}
クラス ConcreteClass1 は AbstractClass を拡張します
{
保護された関数 getValue() {
return "ConcreteClass1";
}
パブリック関数 prefixValue($prefix) {
return "{$prefix}ConcreteClass1";
}
}
14. インターフェイスを使用すると、クラスが実装する必要があるメソッドを指定できますが、これらのメソッドの特定の内容を定義する必要はありません。
標準クラスを定義するのと同じように、interface を通じてインターフェイスを定義できますが、その中で定義されているメソッドはすべて空です。
インターフェイスで定義されるすべてのメソッドはパブリックである必要があります。これはインターフェイスの特性です。
インターフェイスを実装するには、implements 演算子を使用します。クラスは、インターフェイスで定義されたすべてのメソッドを実装する必要があります。実装しない場合は、致命的なエラーが報告されます。
複数のインターフェイスを実装する場合は、カンマを使用して複数のインターフェイスの名前を区切ることができます。
複数のインターフェイスを実装する場合、インターフェイス内のメソッドに同じ名前を付けることはできません。
extends 演算子を使用してインターフェイスを継承することもできます。
定数はインターフェイスでも定義できます。インターフェイス定数とクラス定数はまったく同じように使用されます。 これらはすべて固定値であり、サブクラスやサブインターフェイスによって変更することはできません。
応用例:
//インターフェース定義
インターフェイス iTemplate
{
パブリック関数 setVariable($name, $var);
パブリック関数 getHtml($template);
}
//インターフェースを使用する
クラス Template は iTemplate を実装します
{
プライベート $vars = array();

パブリック関数 setVariable($name, $var)
{
$this->vars[$name] = $var;
}

パブリック関数 getHtml($template)
{
foreach($this->vars as $name =>$value) {
$template = str_replace('{' . $name . '}', $value, $template);
}

return $template;
}
}
15.PHP5 には、配列を使用するのと同じように、foreach を通じてオブジェクト内のプロパティを走査するための関数が用意されています。
デフォルトでは、外部反復は外部から見えるプロパティの値のみを取得できます。
応用例:
クラスMyClass
{
パブリック $var1 = '値 1';
パブリック $var2 = '値 2';
パブリック $var3 = '値 3';
保護された $protected = '保護された変数';
プライベート $private = 'プライベート変数';
関数 iterateVisible() {
echo "MyClass::iterateVisible:n";
foreach($this as $key => $value) {
Print "$ key = & gt; $ valueen"; }
}
}
$class = 新しい MyClass();
foreach($class as $key => $value) {
Print "$key => $valuen";
}
エコー「n」;

$class->iterateVisible();
?>
16. デザインパターン
Factory パターンを使用すると、コードの実行中にオブジェクトをインスタンス化できます。オブジェクトを「生成」する役割を担うため、ファクトリ パターンと呼ばれます。工場
メソッドのパラメータは、生成するオブジェクトに対応するクラス名です。
シングルトン パターンは、クラスに固有のオブジェクトを生成するために使用されます。最も一般的に使用される場所はデータベース接続です。 シングルトン パターンを使用して
を生成します オブジェクトの作成後、そのオブジェクトは他の多くのオブジェクトで使用できます。
応用例:
クラスの例
{
//この属性にクラスインスタンスを保存します
プライベート静的 $instance;

// オブジェクトの直接作成を防ぐために、コンストラクターはプライベートとして宣言されています
プライベート関数 __construct()
{
echo '私は構築されています';
}
// シングルトンメソッド
パブリック静的関数singleton()
{
If (!isset(self::$instance)) {
$c = __CLASS__;
self::$instance = new $c;
}
return self::$instance;
}

// Exampleクラスの通常のメソッド
パブリック関数 bark()
{
エコー「ワン!」;
}
// ユーザーがオブジェクト インスタンスをコピーできないようにします
パブリック関数 __clone()
{
trigger_error('クローンは許可されていません。', E_USER_ERROR);
}
}
?>

このようにして、Example クラスの一意のオブジェクトを取得できます。

// コンストラクターがprivate宣言されているため、この書き方は間違いになります
$test = 新しい例;
// 以下は Example クラスのシングルトン オブジェクトを取得します
$test = 例::singleton();
$test->bark();
// オブジェクトをコピーすると E_USER_ERROR が発生します。
$test_clone = クローン $test;
?>
17.PHP 5 では、新しい Final キーワードが追加されています。親クラスのメソッドが Final として宣言されている場合、クラスが
の場合、サブクラスはそのメソッドをオーバーライドできません。 Final 宣言された場合、継承することはできません。
18. オブジェクトのコピーは、 clone キーワードを使用して完了できます (オブジェクトに __clone() メソッドが存在する場合、それが最初に呼び出されます)。オブジェクト内の __clone()
メソッドを直接呼び出すことはできません。
$copy_of_object = クローン $object;
オブジェクトがコピーされると、PHP5 はオブジェクトのすべてのプロパティの「浅いコピー」を実行します。すべてのプロパティの参照はまだありません
元の変数をポイントして変更します。 __clone()メソッドが定義されている場合、新しく作成したオブジェクト(コピーして生成されたオブジェクト)の__clone()メソッドが調整されます
(必要に応じて) プロパティの値を変更するために使用できます。

19. オブジェクトの比較
比較演算子 (==) を使用して 2 つのオブジェクト変数を比較する場合、比較原則は次のとおりです: 2 つのオブジェクトの属性と属性値が等しく、2 つのオブジェクト
が同じクラスのインスタンスである場合、2 つのオブジェクト変数は等しいです。 www.2cto.com
また、等価演算子 (===) を使用する場合、2 つのオブジェクト変数は特定のクラスの同じインスタンス (つまり、同じオブジェクト) を指している必要があります。
20. オブジェクトと参照
PHP 参照はエイリアスです。つまり、2 つの異なる変数名が同じ内容を指します。 PHP5 では、オブジェクト変数はオブジェクト全体の値を保持しなくなりました。
実際のオブジェクトのコンテンツにアクセスするには、識別子を保存するだけです。 オブジェクトがパラメーターとして渡される場合、結果として返される場合、または別の変数に割り当てられる場合、別の
外部変数には元の変数との参照関係はありませんが、両方とも同じオブジェクトの実際の
を指す同じ識別子のコピーを格納します。 コンテンツ

作者: JL_liuning

www.bkjia.com本当http://www.bkjia.com/PHPjc/478097.html技術記事最近、PHP エンジニアの面接に何度か参加しましたが、筆記試験の質問に対する答えが満足のいくものではありませんでした。 帰ってきたら、失敗した理由をまとめました。それは、PHP のマニュアルを読んでいなかったからです。いくつかの企業からの PHP の基本的な面接の質問が利用可能です...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
PHP 拡張子 intl
から 1970-01-01 08:00:00
0
0
0
phpのデータ取得?
から 1970-01-01 08:00:00
0
0
0
PHP GET エラー レポート
から 1970-01-01 08:00:00
0
0
0
phpを上手に学ぶ方法
から 1970-01-01 08:00:00
0
0
0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート