ホームページ  >  記事  >  バックエンド開発  >  PHPクラスとオブジェクト完全解析(1)_PHPチュートリアル

PHPクラスとオブジェクト完全解析(1)_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:10:39852ブラウズ

PHP クラスとオブジェクトの完全な分析 (1)

1. クラスとオブジェクト
オブジェクト: このタイプのものにおける各物理オブジェクトの実際の個体。 $a =new User(); インスタンス化後の $a
引用: PHP エイリアス、2 つの異なる変数名が同じコンテンツを指しています
カプセル化: オブジェクトのプロパティとメソッドをクラス (論理単位) に編成します
継承: コードの再利用を目的として、元のクラスに基づいて新しいクラスを作成します。
ポリモーフィズム: サブクラス型のポインターを親クラス型のポインターに割り当てることができます。
------------------------------------------------------------
2. オブジェクトを自動的にロードします:
オートローディングは、スクリプトで定義されていないクラスが参照されたときに自動的に呼び出される特別な __autoload 関数を定義します。
1 [php] plaincopyprint を表示しますか?
2 関数 __autoload($class){
3 require_once("classes/$class.class.php");
4 }
__autoload を使用する理由
1. まず、このクラスファイルがどこに保存されているかわかりません。
2. もう 1 つは、このファイルをいつ使用する必要があるかわからないということです。
3. 特にプロジェクトファイルの数が多い場合、各ファイルの先頭に長いrequire文字列を記述することは不可能です...
交換しました
require_once ("classes/Books.class.php") ;
require_once ("classes/Employees.class.php" ) ;
require_once ("classes/Events.class.php") ;
require_once ("classes/Patrons.class.php") ;
zend は、ファイル名にパスを含める最も一般的な方法の 1 つを推奨します。たとえば、次の例:
1 [php] plaincopyprint を表示しますか?
2
3 ソースプリントを見る
4 // Main.class
5
6 関数 __autoload($class_name) {
7 $path = str_replace('_', DIRECTORY_SEPARATOR, $class_name);
8 require_once $path.'.php';
9 }
temp = 新しい Main_Super_Class();
上記の例では、パス内のすべてのアンダースコアが区切り文字に置き換えられ、Main/Super/Class.php ファイルに到達します。
短所:
コーディングプロセスでは、コードファイルをどこに配置するかを明確に知っておく必要があります。
また、ファイル パスはクラス名にハードコーディングされているため、フォルダー構造を変更する必要がある場合は、すべてのクラス名を手動で変更する必要があります。
開発環境にいて、速度をあまり気にしない場合は、「すべて含める」メソッドを使用すると非常に便利です。
すべてのクラス ファイルを 1 つまたは複数の特定のフォルダーに配置し、トラバーサルを通じてそれらを検索してロードします。
例えば
$arr = 配列 (
「プロジェクト/クラス」、
「プロジェクト/クラス/子」、
「プロジェクト/インターフェース」
);
foreach($arr as $dir) {
$dir_list = opendir($dir);
while ($file = readdir($dir_list)) {
$path = $dir.DIRECTORY_SEPARATOR.$file;
if (strpos($file, ".class.php"))
require_once $path;
}
}
?>
もう 1 つの方法は、クラス ファイルとその場所の間に関連する設定ファイルを確立することです。例:
ソースプリントを見る
//configuration.php
array_of_associations = array(
'MainSuperClass' = 'C:/Main/Super/Class.php',
'MainPoorClass' = 'C:/blablabla/gy.php'
);
というファイル
「autoload_generated.php」が必要です
function __autoload($className) {
global $autoload_list;
$autoload_list[$className];
$x = new A();
?>
------------------------------------------------
3.コンストラクターとデストラクター
PHP コンストラクター __construct() を使用すると、クラスをインスタンス化する前にコンストラクターを実行できます。
コンストラクターはクラス内の特別なメソッドです。 new 演算子を使用してクラスのインスタンスを作成する場合、コンストラクターが自動的に呼び出され、その名前は __construct() である必要があります。
(クラス内で宣言できるコンストラクターは 1 つだけですが、コンストラクターはオブジェクトが作成されるたびに 1 回だけ呼び出されます。このメソッドはアクティブに呼び出すことはできません。
そのため、通常はいくつかの便利な初期化タスクを実行するために使用されます。このメソッドには戻り値がありません。 )
機能: オブジェクトの作成時にオブジェクトを初期化するために使用されます
サブクラスは、分類されたコンストラクターparent::__construct()を実行します。
デストラクター: __destruct () 定義: 特殊な内部メンバー関数、戻り値の型なし、パラメーターなし、自由に呼び出すことはできず、オーバーロードなし。
クラス オブジェクトの寿命が終わると、システムは自動的に呼び出して、コンストラクターに割り当てられたリソースを解放します。
コンストラクター メソッドに対応するのは、デストラクター メソッドです。デストラクター メソッドを使用すると、クラスを破棄する前に、ファイルを閉じる、結果セットを解放するなど、いくつかの操作を実行したり、いくつかの関数を完了したりできます。
デストラクターはパラメーターを取ることができず、その名前は __destruct() でなければなりません。
機能: 後処理をクリーンアップします。たとえば、オブジェクトの作成時に new を使用してメモリ空間を開き、終了する前にコンストラクターに割り当てられたリソースをデストラクターを使用して解放します。
例:
クラス人 {
パブリック $name
公開年齢
//コンストラクターの初期化割り当てを定義します
パブリック関数 __construct($name,$age) {
$this->name=$name;
$this->age=$age;
}
パブリック関数 Say() {
echo "私の名前は:".$this->name."
"; Y エコー「私の年齢は次のとおりです。」
}
//デストラクター
関数__destruct()
️ 「さようなら:」をエコーし​​ます。$this->name;
}
}
$p1=新しい人("レン", 25);
$p1->say();
------------------------------------------------- ---------------
4. アクセス制御
プロパティまたはメソッドのアクセス制御は、先頭にキーワード public、protected、または private を追加することで実現されます
public で定義されたクラス メンバーにはどこからでもアクセスできます
定義された保護クラスのメンバーは、そのメンバーが配置されているクラスのサブクラスおよび親クラスからアクセスできます (もちろん、メンバーが配置されているクラスにもアクセスできます)。
プライベートとして定義されたクラス メンバーには、そのメンバーが配置されているクラスからのみアクセスできます。
クラスメンバーへのアクセス制御
クラスメンバーはキーワードpublic、protected、またはprivateを使用して定義する必要があります
メソッドのアクセス制御
クラス内のメソッドは、キーワード public、protected、または private を使用して定義する必要があります。これらのキーワードが設定されていない場合、メソッドはデフォルトの public に設定されます。
例:
クラスMyClass
{
パブリック $public = 'パブリック'
;
保護 $protected = '保護'
プライベート $private = 'プライベート';
関数printHello()
{
$this->public をエコーする
$this->保護済み;
$this->プライベートをエコー
}
}
$obj = 新しい MyClass();
echo $obj->public; // この行は通常通り実行できます
echo $obj->protected; // この行は致命的なエラーを生成します
echo $obj->private; // この行でも致命的なエラーが発生します
$obj->printHello(); // パブリック、プロテクト、プライベートを出力します
------------------------------------------------- ------------
5.オブジェクトの継承
継承の定義: コードの再利用を目的として、元のクラスに基づいて新しいクラスを作成します。
------------------------------------------------
オブジェクトの継承では上書きが使用されます
オーバーロードとは、単一のオブジェクト内で同じメソッド名を持つ異なるパラメータを持つメソッドです
------------------------------------------------
継承はよく知られたプログラミング機能であり、PHP のオブジェクト モデルも継承を使用します。継承は、クラス、オブジェクト、およびオブジェクト間の関係に影響を与えます。
たとえば、クラスを拡張する場合、サブクラスは親クラスのすべての public メソッドと protected メソッドを継承します。ただし、サブクラスのメソッドは親クラスのメソッドをオーバーライドします。
継承は機能設計と抽象化に非常に役立ち、同様のオブジェクトに新しい関数を追加することで、これらの共通関数を書き直す必要がなくなります。
クラス人 {
パブリック $name
公開$年齢
関数say() {
echo "私の名前は:".$this->name."
";
echo "私の年齢は:".$this->age;
}
}
// クラスの継承
クラスの生徒が person {
を拡張します
var $school //生徒がいる学校の属性
関数の勉強() {
echo "私の名前は:".$this->name."
"; Y エコー「私の学校は:」。 ️
}
$t1 = 新しい学生
;
$t1->名前 = "張三";
$t1->学校 = "北京ダクス"
$t1->勉強();
---------- --------- --------------- -------- -----
6. 範囲解析演算子 (::)
スコープ解決演算子 (Paamayim Nekudotayim とも呼ばれます)、またはもっと単純にコロンのペアを使用して、静的メンバー、メソッド、および定数にアクセスできます。また、クラス内のメンバーやメソッドをオーバーライドするために使用することもできます。
クラス外のこれらの静的メンバー、メソッド、定数にアクセスする場合は、クラス名を使用する必要があります。
2 つの特別なキーワード self とparent は、クラス内のメンバーまたはメソッドにアクセスするために使用されます。
注:
サブクラスが親クラスのメソッドをオーバーライドすると、PHP は、これらのメソッドがサブクラスで呼び出されるまで、親クラスでオーバーライドされたメソッドを実行しなくなります
例:
クラスOtherClassはMyClassを拡張します
{
パブリック静的$my_static = '静的変数';
パブリック静的関数 doubleColon() {
echoparent::CONST_VALUE
;
echo self::$my_static . "n";
}
}
OtherClass::doubleColon();
?>
http://www.bkjia.com/PHPjc/934463.html

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/934463.html技術記事 PHP のクラスとオブジェクトの完全な分析 (1) 1. クラスとオブジェクト オブジェクト: このタイプのものにおける各物理オブジェクトの実際の個体。 $a =new User(); インスタンス化後の $a への参照: php エイリアス、2 つの異なる...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。