1: 構造と呼び出し (インスタンス化):
class className{}, call: $obj = new className(); クラスにコンストラクターがある場合は、パラメーターも渡す必要があります。 $obj = new className($v,$v2…);
など
2: コンストラクターとデストラクター:
1. コンストラクターは初期化に使用されます。パラメーターを受け取ることができる __construct() を使用します。
2. ただし、デストラクターはパラメーターを受け取ることができません (クラスを削除する前に一部の操作または関数を実行するために使用されます)。デストラクターの名前は __destruct() です。スクリプトの実行終了時にメモリ上のオブジェクトが破棄されるため、関数を破棄する必要はありませんが、COOKIEなど一部のオブジェクトはこの関数を使用して破棄する必要があります。
知識ポイント: PHP4 もコンストラクターを提供しますが、クラスと同じ名前のクラス メソッドを使用します。このアプローチは、クラスに __construct が含まれていない場合、同じ名前のメソッドを検索します。
コードをコピーします。 コードは次のとおりです:
class test
{ var $b;
function test() { $this->b=5; }
function addab($c) { return $this->b+$c; }
}
$a = new test(); ; // 9
3 を返します。PHP は親クラスのコンストラクターを自動的に呼び出しません (コンストラクターのオーバーロードはサポートされていません)。parent キーワードを使用して明示的に呼び出す必要があります。
コードをコピー コードは次のとおりです:
class従業員{
function __construct()….
}
class ManagerエクステントEmployee{
function __construct(){
parent::_construct();
echo 'This サブクラスの親クラスのコンストラクターが呼び出されます! ';
}
}
もちろん、このインスタンスと関係のない他のクラスのコンストラクターを呼び出すこともできます。 __construct() の前にクラス名を追加するだけです。例:
otherClassName::__construct();
クラスの主なファミリーメンバー: プロパティ、メソッド、定数、静的メンバー
3. クラス属性:
クラスの属性に値を割り当てたり取得したりするには 2 つの方法があります。
1. パブリックスコープのパブリックキーワードを使用します。 2. __set() と __get() を使用して値を代入および取得します。前者を設定メソッド (setter) または変更メソッド (ミューテーター) と呼び、後者をアクセスメソッド (アクセサー) またはと呼びます。ゲッターメソッド(ゲッター)。この方法を使用することをお勧めします: 利点:
A. データ検証は __set() で均一に実行できます。
B. 属性の一元管理に便利。
注:
最初: __set() と __get() は、次のように、プライベート属性でのみ機能します。 public で定義された属性の場合、どちらも遅延的です:
コードをコピーします コードは次のとおりです:
クラス テスト{
protected $a=9,$b=2,$c;
public $d;
function __set($n,$v) { $this->$n = $v+2 }
function __get( $name) { return $this->$name+2; }
}
$a = new test();
$a->b =5; echo "
"; a->b;
インスタンスは、__set および __get を通じて $a、$b、$c の設定のみをフィルターして返します。$d については機能しません。たとえば、$a->d=5 の場合でも 5 が返されます。
2 番目: __set($n,$v) は 2 つのパラメーターを受け取ります。また、__get($n) にはパラメーターを 1 つだけ指定できます。例:
コードをコピー コードは次のとおりです:
class test{
private $a=5,$b=6,$c;
function __set($n,$v)
{
if($ n=='a'&&$n>0)
$this->$n = $v;
else
$this->$n = $v+2;
}
function __get($ name)
{
return $this->$name; // return $this->$name + $this->addab(); の値が呼び出された場合、実際の戻り値は+a+b値。デフォルトは 5+5+6=16 です。
}
function addab()
{ return $this->a + $this->b; }
}
$e=new test();
$e->a = 11;記述へ: クラスの内部形式は変数である $this->$n と記述されますが、外部インスタンスは $e->a と記述されます。
$e->b = 12; //get 14
$e->k = 22;
クラスの属性は、__set がどうかに関係なく、自由に拡張できます。インスタンスの作成時に使用されるかどうか 最後に、$e->newProperty = xx; を使用してプロパティを直接作成できますが、これはお勧めしません。
4. クラスメソッド:
クラス内の関数として理解してください。
電話:
1. 内部呼び出し: $this->Fanname(); または $this->addab() または test::addab(); を使用できます。
2. インスタンス化を呼び出すときは、$e->addab(); を使用します。上記の例のように、このメソッドで $this キーワードを使用しない場合:
function addab() { return $this->a+$this->b; }
次のように変更します: function addab() {次に、外部インスタンスでこのメソッドを呼び出すには、「$e::addab();」または「test::addab();」を使用することもできます。
5. クラス定数:
クラスの属性がクラス内の変数として理解される場合、クラスの定数と変数は異なります:
コードをコピーします。は次のとおりです:
class test{
private $a;
const PI = '3.14';
…..
//「$this::PI」または「クラス名: :」の 2 つのメソッドを使用して、クラス内で上記の定数を呼び出します。 PI"、ここでは次のように test::PI です:
function getvalue(){
return $this->a * $this::PI; //または $this->a * test::PI、使用しますthis キーワードまたはクラス名のいずれかを使用できますが、両方とも 2 つのコロンを使用する必要があります。
}
}
$e= new test();
$e->PI =5; //ここで -> を使用すると、クラスの PI の値が変更されるのではなく、PI という名前の属性が作成されるだけであることに注意してください。定数の。
echo $e::PI; //これは呼び出し側クラスの定数です。
定数は二重コロン:: でのみ呼び出すことができます。そしてその値は変更できません。
クラス外でインスタンス化した後にクラス定数を呼び出す方法も 2 つあります。メソッドは
"$e::PI" または "test::PI" です。共通点はどちらもコロンを使用することです。違いは、this キーワードは外部では使用できず、インスタンス名のみが使用できることです。ですが、クラス名::PI は汎用です。
6. クラスの静的メンバー (静的プロパティまたは静的メソッド):
クラスのすべてのインスタンスで共有されるフィールドまたはメソッドを作成する必要がある場合。静的メンバーを使用する必要があります。特徴は2つあります:
1. 静的メンバーは、スクリプト上のクラスのすべてのインスタンスを呼び出すことができますが、クラスの特定のインスタンス名を使用して呼び出すことはできません。代わりに、「クラス名::$ メンバー」を使用します。 name」をクラス外で呼び出すメソッド。内部的には、クラスは「self::$メンバー名」を使用して呼び出します。
2. 新しいインスタンスが作成されるたびに、静的メンバーはクラスの初期値ではなく、最後に作成されたインスタンスの最後の値から再計算されます。
3. public で定義された静的メンバーの場合、その値は外部から変更できます。プライベートなどは機能しません。
コードをコピー コードは次のとおりです:
class test{
public static $v = 0;
function __construct(){ self::$v++ }
static function getV(){ return self; ::$ v; }
}
$a = new test();
echo test::getV(); // 1
$b = new test();
echo test::getV(); を返します。 Returns 2
test::$v=8; //パブリックに定義されたメンバーのため、静的メンバーの値を変更します。
$c = new test();
echo test::getV(); // Return 9
7. キーワード:
(1) このキーワード: クラス自体を参照するために内部的に使用されます。 $this->プロパティ名やメソッド名などのプロパティ、メソッド、または定数にアクセスします。 $this::定数名。これをこのクラスのサブクラスで使用して、独自のプロパティまたはメソッドを参照することもできます。
(2) ダブルコロン「::」キーワード: 定数と静的メンバーを呼び出すために使用されます。
(3) self キーワード: self::$staticVar など、クラス内の静的メンバーを呼び出すために二重コロンとともに使用されます。クラス内では、$this を使用して静的メンバーを呼び出すことはできません。
(4) __toString(): クラスで __toString() を使用して、クラスを文字列に変換し、クラスを出力します。これはほとんど役に立ちません:
コードをコピーします コードは次のとおりです。 :
class test{ public $p;
public function __toString(){ return var_export($this,TRUE); }
}
$a=new test();
echo $a; //出力: テスト: :__set_state(array( 'p' => NULL, ))、または次のように記述されます: echo $a->__toString();
(5) __clone(): このキーワードは、オブジェクトがクローンを作成し、クローン作成時に特定の値を変更するために使用されます。
(6) __call(): メソッドのオーバーロード。次の例を参照してください:
コードをコピーします コードは次のとおりです:
class cB{
function __call($method,$n){
if($method= ='showVarType'){
if(is_numeric($n[0])){ //$n は使用できません。 $n[0];
$this->displayNum();
}else if (is_array($n[0])){
$this->displayArr();
}else{
$this を使用するには->displayOther();
}
}
}
function displayNum() {
echo '
これは数字です!
';
}
function displayArr() {
echo '< ; h3>これは配列です!';
}
function displayOther() {
echo '
配列でも数値でもありません!
';
}
}
$x='a';
$y=array('a','b');
$b=new cB;
$b->showVarType($x); //配列または数値ではありません
$b->showVarType($y) //これは配列です
;
showVarType() メソッドをクラス内で定義できないことに注意してください。定義しない場合、コードは機能しません。
(7) 拡張: 継承: クラス a{} クラス b を拡張します。{} クラス b はクラス a を継承します
添付: メモリ: 今後は、メソッドやプロパティを呼び出すときは「-> 」を使用し、定数を呼び出すときは二重コロン「::」を使用して、混乱しないようにします。
8. メソッドと属性の範囲:
6種類あり: public (デフォルト、省略可能、php6のvar宣言にも相当)、private (プライベート、サブクラスでは使用不可)、protected (プライベートだがサブクラスで使用可能)、abstract( abstract、下記を参照) )、final (サブクラスでの上書きの防止 - オーバーロード、継承の防止とも呼ばれ、final class test{final function fun(){}} などのクラス名とメソッドの変更に使用されますが、属性には使用できません)、静的(静的)
9: 抽象クラスと抽象メソッド (抽象 - 注: いわゆる抽象属性はありません):
抽象化は、子クラスのテンプレートまたは基本クラスを定義する親クラスとして理解できます。スコープ抽象は親クラスでのみ宣言されますが、子クラスで実装されます。注:
1. 抽象クラスはインスタンス化できず、サブクラス (具象クラス) に継承された後にのみ実装できます。
2. 抽象クラスは、そのサブクラス内の抽象クラスのすべての抽象メソッドを実装する必要があります。そうしないと、何か問題が発生します。
3. 抽象メソッドでは宣言されるだけで、具体的に実装することはできません。たとえば、abstract function gettow(){ return $this->p } は間違っています。abstract function gettow; だけを宣言できます。 (); (角括弧 {} も含めないでください)。抽象メソッドと抽象クラスは、主に複雑なクラス階層で使用されます。この階層により、各サブクラスに特定のメソッドが含まれ、オーバーロードされることが保証されます。これはインターフェースを通じても実現できます
4. プロパティに抽象プロパティという名前を付けることはできません。たとえば、abstract $p = 5 は誤りです。
5. 抽象として宣言されたクラスのみが抽象メソッドを宣言できますが、メソッドが抽象として宣言された場合、具体的に実装することはできません。例:
コードをコピーします コードは次のとおりです:
abstract class Employee
{
abstract function a(…);
abstract function b(…);
}
I will extendこの親クラスは、後でさまざまなサブカテゴリ (マネージャー、従業員、レジ担当者など) に形成されます。
6. 抽象クラスでは、特定のメソッドを実装したい場合、それを抽象として宣言することはできません。実はこちらの方が意味があるのかもしれません。複数のクラスライブラリの共通部分を抽象クラスに抽出し、他のクラスがその抽象クラスを継承することができます。次のように:
コードをコピーします コードは次のとおりです:
abstract class BaseShop{
Const TAX=0.06 // 抽象クラスで定数を定義します
public function buy($gid) { // If抽象メソッドとして定義されている 抽象関数 buy() はここで本体を実装できません。
echo('ID:'.$gid.の商品を購入しました。');
}
public function sell($gid) {
echo('ID:'.$gid.の商品を販売しました。' ');
}
public function view($gid) {
echo('ID: '.$gid.' の商品を閲覧しました。');
}
}
class BallShop extends BaseShop{
var $itme_id = null;
public function __construct()
{
$this->itme_id = 2314;
}
public function open()
{
$this->sell($this->itme_id);
}
public function getTax()
{
echo printf('
平均税率は %d%%です。
',$this::TAX*100);
}
}
$s = 新しい BallShop
$; s->open(); //ID: 2314 の商品を販売しました
$shop->getTax();
10: タイププロンプト:
タイププロンプト関数はそれのみ使用できることに注意してくださいパラメータがオブジェクトであることを示すプロンプトに使用されますが、整数、文字列、浮動小数点などの型プロンプトには使用できません。一部のクラス メソッドでは、渡されるパラメーターが予期されるオブジェクト タイプである必要があります。次のメソッドを使用して、この代替を強制できます。型ヒンティングを実現するには、function funname(OtherClassName $otherclassINSName,$c….) のように、メソッドのオブジェクト パラメーターの前に既存のクラスの名前を追加するだけです。OtherClassName は既存のクラスである必要があることに注意してください。次のように:
コードをコピーします コードは次のとおりです:
class em{ var $k=56; }
class test{
function __construct()
{ echo $this->addab(新しい em(), 2);
function addab(em $j,$c) //このメソッドは内部または外部から呼び出すことができます。範囲が許す限り。
{ return $j->k+$c; }
}
$a = new test();
$b = new em();
echo $a->addab($b,2);または $a->addab(new em(),2);
11. クラス管理:
1.instanceof キーワード: オブジェクトが特定のクラスのインスタンスかサブクラスであるか、または特定のインターフェイスを実装しているかを分析するために使用されます。ただし、注意してください: クラス名には引用符などの区切り文字がありません。 、そうでない場合は、何か問題が発生します。テストで「test」を使用できない場合は
コードをコピーしてください コードは次のとおりです:
クラス test2{}
クラス テスト{}
クラス testChilern 拡張テスト{}
$a = new test2();
$m = new test();
$i = ($m インスタンスオブテスト);
if( $i)echo '$m はクラス test のインスタンスです!
'; // この値を取得します
switch ($a instanceof test){
case true :
echo 'YES
';
break;
case false :
echo 'No
'; //この値を取得します
break;
}
$d=new testChilern();
if($d instanceof test)echo '$d はクラス test のサブクラスです!
'; // この値を取得します
2. クラスが存在するかどうかを判断します: boolean class_exists(string class_name): class_exists('test');
3. クラス名を返します: string get_class(object)。成功した場合は、インスタンスのクラス名を返します。
$a = new test2(); //test2 を返します。
4. クラスのパブリック属性を理解します: array get_class_vars('className') は、定義されたすべてのパブリック属性名とそれに対応する値を含むキー配列を返します。この関数はインスタンス名を変数として使用できません
5. クラス メソッドを返す: get_class_methods('test'); //または: get_class_methods($a); は、インスタンス名をパラメーターとして使用し、コンストラクターを含むすべての非プライベート メソッドを返すことができます。
6. print_r(get_declared_classes()) は、現在の PHP バージョンのすべてのクラス名を学習します。 PHP5には149があります。
7. get_object_vars($a) は、インスタンス内のすべてのパブリック属性とその値の連想配列を返します。 get_class_vars() との違いに注意してください:
/* (1) get_object_vars($a) はパラメーターとしてインスタンス名を使用しますが、get_class_vars('test') はパラメーターとしてクラス名を使用します。
* (2) get_object_vars($a)で取得される属性値はインスタンス実行後の値、get_class_vars('test')で取得される属性値はクラスの初期定義です。
* (3) どちらも連想配列を返し、割り当てられていない属性に対しては NULL 値を返します。 public $q; がクラス test で定義されている場合、Array ([v] => 5 [q]=>) が返されます、
*/
8. 親クラスの名前を返します: get_parent_class($b);//または get_parent_class(‘test2’);
9. インターフェースが存在するかどうかを確認します: booleaninterface_exists($stringinterface[,boolean autoload])
10. オブジェクトのタイプを決定します: boolean is_a($obj,'className') $obj が CLASSNAME クラスまたはそのサブクラスに属している場合、$obj がクラスのタイプと関係がない場合は FALSE を返します。 。例: is_a($a,'test')
11. 特定のクラスのサブオブジェクトであるかどうかを判断します。$b が TEST クラスから継承される場合は TRUE、それ以外の場合は FALSE を返します。ブール値 is_subclass_of($b,'test');
12. クラスまたはインスタンスにメソッドが存在するかどうかを確認します。 Method_exists($a,'getv') //または、method_exists('test','getv') を使用します。この関数は、公開されていないスコープのメソッドに適しています。
上記の関数の例:
コードをコピーします コードは次のとおりです:
class test{
public $v=2;
private $c=5;
function __construct(){
$ this->v= 5;
}
プライベート関数 getv(){
return $this->v;
}
}
class test2 extends test{}
$a=new test();$b=new test2();
print_r( get_class_methods('test')); // または: print_r( get_class_methods($a)); 両方とも Array ( [0] => __construct [1] => getv )
echo '
';
print_r( get_class_vars('test')); //Return: Array ( [v] => 2 )上記は異なります。 print_r( get_class_methods($a));
echo '
';
echo get_parent_class($b);// または get_parent_class('test2'); を使用して test
を返すことはできません。 echo '
';
echo is_a($b,'test');// Return 1
echo '
';
if(is_subclass_of('test2','test') )echo ' それはサブカテゴリーです! '; //または (is_subclass_of($b,'test'))、パラメーター 1 が $a の場合、1 を返します、
echo '
';
echo method_exists($a,' getv ') //または、method_exists('test','getv') を使用して 1 を返します。この関数は、プライベートなどのドメインを定義するメソッドにも適しています。
11. クラスライブラリファイルを自動的にロードします:
さらにクラスがある場合、たとえば 3 つのクラス ライブラリ ファイルを 1 つのファイルにロードする場合: a.class.php、b.class.php、c.class.php、3 つの require_once('classes/a.class .php) ;
require_once('classes/b.class.php);
require_once('classes/c.class.php);
PHP5 自動ロード関数を使用してこれを処理できます。グローバル アプリケーション構成ファイルで、特別な関数 __autoload($class) 関数を定義します (__autoload はクラスのメソッドではなく、単なる別の関数であり、何もする必要はありません)クラスを使用します):
function __autoload($class){
require_once("classes/$class)
}
関数がどこに配置されるかは関係ありません。クラスインスタンスを作成するときにこの自動ロード関数を呼び出す必要はありません。 PHP が自動的に実行します。ただし、必ず 1 つ注意してください。「呼び出しページでインスタンスを作成するために使用されたクラス名」、「呼び出されるファイル名」、および「ファイル内のクラスの名前」は同じである必要があります。この方法では、__autoload() を呼び出す必要はありません。異なる場合は、__autoload('c'); を呼び出してファイル名プレフィックスを付ける必要があります。例:
c.class.php ファイルのコードは次のとおりです:
コードをコピーします
コードは次のとおりです:
< ?php
class c{
public $m=7;
}
?>
ここでのコードのクラス名は c で、ファイル名も c です。
Index.php で呼び出されます:
コードをコピーします コードは次のとおりです:
< ?php
function __autoload($class){
require_once “$class.class.php”;
}
$m = new c(); //インスタンス作成時に呼び出されるクラスも c
echo $m->m;
?>
このとき、PHP は自動的に c.class.php を呼び出します。ルートディレクトリのクラスC。
ただし、c.class.php のコードが次の場合:
コードをコピーします コードは次のとおりです:
< ?php
class mm{
public $m=7;
}
? >
呼び出しページのindex.phpコードは次のとおりです:
コードをコピーします コードは次のとおりです:
< ?php
function __autoload($class){
require_once "$class. class.php";
}
# __autoload('c'); //この行を追加しないとエラーが発生します。
$m = new mm();
echo $m->m;
?>
はエラーとなり、mm.class.php ファイルが見つからないというメッセージが表示されます。このとき、 __autoload('c'); という行を追加することもできますが、これではコードを簡素化するという目的は達成できません。
クラスのファミリー拡張: クラスの高度な機能:
1. オブジェクトの複製:
オブジェクトのインスタンスが複製されると、その初期プロパティ値は複製されたオブジェクトの現在の値を継承します。
コードをコピー コードは次のとおりです:
class test
{
public $p=5;
function __clone(){ //クローン作成が発生した場合にのみ機能します。クローン作成中に特定の値を変更するために使用されます
$this->p=15;
}
}
$a=new test();
echo $a->p;
$a->p=8 ; //__clone() メソッドがない場合、$b の P 値は 8
$b = clone $a;
echo $b->p; //15
2. オブジェクトの継承:
final宣言されていないクラスも継承可能、finalやprivateで定義されていないメソッドも継承可能、privateで定義されていないプロパティも継承可能。サブクラスが親クラスまたはスーパークラスを継承すると、親クラスまたはスーパークラス (祖父クラスおよび祖父の祖父) のすべての許可されたメソッドと属性を直接使用できます。
キー: 継承におけるコンストラクターとオーバーロードの特性を理解します。
(1) 継承におけるコンストラクターの特徴:
1. 親クラスにはコンストラクターがあるが、サブクラスにはコンストラクターがない場合: サブクラスはインスタンス化時に親クラスのコンストラクターを自動的に実行します。このとき、サブクラスのインスタンスを作成したい場合は、親クラスのコンストラクターに必要なパラメータを導入する必要があります。導入しないとエラーが発生します。 「サブクラスのサブクラス」にコンストラクタがない場合でも、インスタンス作成時にその親クラスのコンストラクタの必須パラメータを入力する必要があります。 PHP は、インスタンスが配置されているサブクラスから結合されたコンストラクターを上方向に検索し、見つかった場合は停止してそのコンストラクターを使用します。したがって、サブクラス自体にコンストラクターがない場合は、コンストラクターを持つ最も近いスーパークラスが優先されます。
コードをコピーします コードは次のとおりです:
class cA{
public $name,$age;
function __construct($n) {
$this->name = $n;
$ this-> 年齢 = 25;
}
function __set($n,$v) {
$this->$n = $v;
}
function __get($n) {
return $this-> $n;
}
}
class cB extends cA{
function funB1() { echo ‘
Class cB 実行成功!
' }
}
class cC extends cB {
function funC1() { echo '
Class cC FunC1!
' }
}
$b=new cB('Jack');
$b-> name='John';
echo "$b->name : $b->age";
$b->funB1();
$c=new cC(); //エラーが発生しますここで、cB にはコンストラクターがないため、cA に基づいており、パラメーターが必要です。これを $c=new cC(‘David’); に変更します。
echo $c->name(); //David
2. サブクラスにもコンストラクターがある場合: このとき、親クラスにコンストラクターがあるかどうかに関係なく、サブクラス自身のコンストラクターが実行されます。
上と同じ:
コードをコピーします コードは次のとおりです:
class cB extends cA{
function __construct() {
echo '
これは Class cB の __construct!< ;/h3>';
}
function funB1() {
echo 'クラス cB は成功しました!
';
}
}
クラス CB が独自のコンストラクターを持っている場合、この時点のインスタンス $b =new cB('Jack');親クラス CA のコンストラクターが実行されていないため、パラメーター JACK は機能しません。したがって、$b->name と $->age は値を初期化しません。追加の値を割り当てる必要があります $b->name='Jack',$b->age=25;
この時点で親クラス CA のコンストラクターを実行したい場合は、次のようにすることができます。
コードをコピーします コードは次のとおりです:
function __construct($n) {
parent::__construct($n); // または: cA::__construct($n);
echo '
これは Class cB の __construct! h3>';
}
parent::__construct($n); は親クラスのコンストラクターを上方向にのみ検索するため、現在見つかったコンストラクターが見つかったら停止して実行します。たとえば、parent::__construct($n) がクラス cC の最後の層で使用され、クラス CB と CA にコンストラクターがある場合、cC のインスタンスは cB のコンストラクターのみを実行します。 cAは実行されません。このとき、CC のインスタンスが CA と CB の両方のコンストラクターを呼び出したい場合は、次の 2 つの方法があります:
A. CB にparent::__construct($n) も追加します
B. CC のコンストラクターを次のように変更します:
コードをコピーします コードは次のとおりです:
function __construct($n) {
cA::__construct($n); //つまり、クラス名::コンストラクターです。
cB::__construct();
echo '
this is Class cB 's __construct!
';
}
(2) サブクラスで親クラスの属性またはメソッドを呼び出す:
1. 親クラスのメソッドを呼び出す: サブクラスで親クラスのメソッドを呼び出すには、
$this->ParentFunction(); または
parent::parentFun の 3 つのメソッドがあります。 ();
2. 親クラスのプロパティを呼び出す: $this->ParentProperty; のみを使用します。
(3) 過負荷:
サブクラスでは、親クラスと同じ属性やメソッドを定義し、親クラスの属性やメソッドの値や動作を変更することができます。これをオーバーロードと呼びます。例:
calss ParClass{ function pfun(){ ….}}class ChildrenClass extends ParClass{function pfun(){ ….}}} //親クラスの pfun メソッドをオーバーロードします。
サブクラスでオーバーロードした後、独自のオーバーロード後に新しく定義されたメソッドまたは属性が最初に実行されます。
サブクラスでparent::parentFun();を使用して親クラスのメソッドを呼び出すこともできますが、取得される値はサブクラス自体によって入力されたパラメータ操作値です。メソッドが親クラスで操作する値ではありません。
3. インターフェース:
インターフェース: インターフェースは、一連の関数の共通の仕様として理解できます。最大の意義は、複数の人が共同で開発する場合に、それぞれの開発に共通のメソッド名を指定することです。
抽象クラスの抽象メソッドと同じ:
1. メソッドの特定の実装をインターフェイスで定義することはできません。これは具象クラスによって実装されます (抽象クラスの非抽象メソッドを定義する必要はありません。具象クラスに実装する必要があるのは抽象メソッドとインターフェイスのみです)。
2. 抽象クラスと同様に、定数はインターフェイスで定義し、具象クラスに直接継承できます。
3. 具象クラスは、抽象クラスのすべての抽象メソッドを実装する必要があります (非抽象メソッドを除く)。
インターフェイス実装プロセス: 1. インターフェイスを定義します。 2. ..implement X、Y、... を使用して特定のクラスに接続します。
コードをコピーします コードは次のとおりです:
interface Info{ //インターフェースを定義しますconst N=22;
public function getage();
public function getname();
}
class ageimplements Info //複数のインターフェースが必要な場合、class age (emJob を拡張)implements Info,interB...{
public $age=15;
public $name='Join';
function getage() {
echo " 学年は $this->age";
}
function getname() {
echo "名前は $this->name";
}
function getN(){
echo '
が定義されていますインターフェイス内の定数 N の値は次のとおりです: '.$this::N.'
'; //インターフェイス内の定数値を直接継承します。
}
}
$age=new age;echo $age::N; //22、インターフェイスで定数値を直接呼び出します。
$age->getN();
抽象クラスとインターフェイス クラスの違いについて: いつインターフェイスを使用し、いつ抽象化を使用するか?
1. 関連性: 作成されたモデルがいくつかの密接に関連するオブジェクトに採用される場合は、抽象化を使用します。無関係なオブジェクトが採用する機能については、インターフェイスを使用します。
2. 多重継承: PHP クラスは複数のインターフェースを継承できますが、複数の抽象クラスを拡張することはできません。
3. パブリック動作の実装: 抽象クラスはパブリック メソッドを実装できますが、インターフェイスは実装できません。
4. 名前空間 (PHP6)
クラスライブラリのスクリプトA.inc.phpとスクリプトB.inc.phpにはclass CNAMEというクラスがあり、これら2つのファイルはindex.phpなどの同じファイル内で呼び出す必要があります。現時点では名前空間が使用されます。
ブジュ:
1. 上の 2 つのファイル A と B を開き、それぞれの先頭に 1 行を追加します。
名前空間 SPACEA と名前空間 SPACEB はカスタマイズ可能です。
2.index.php でクラスをインスタンス化する場合、クラスの前に名前空間と二重コロンを追加します。
include 'a.inc.php';
include 'b.inc.php'; a =新しいスペースA::CNAME();
$b=新しいスペースB::CNAME();
こうすれば争いは起こらない。
しかし、PHP6 が正式にリリースされる前に、この機能はまだ完成していません。
5. イテレーターと反復を実装します。
「PHP バイブル」P142 を参照してください。
6. リフレクション API を使用します。
簡単な例: class a{ …. }
$c = new ReflectionClass(‘a’); echo '
'.$c.'
';
クラス a の構造と内容を出力します。 『PHPバイブル』P145参照
http://www.bkjia.com/PHPjc/824842.html
www.bkjia.comtruehttp://www.bkjia.com/PHPjc/824842.html技術記事 1: 構造と呼び出し (インスタンス化): class className{}, call: $obj = new className(); クラスにコンストラクターがある場合は、パラメーターも渡す必要があります。例: $obj = new className($v,$v2…); 2: 構造...