php 5中類の学習

7937 ワード


<?php     
class TEST     
{     
    const NAME = 'value'; //       
    public $name = 'value'; //       
    public function name() //       
    {     
        echo 'value';     
    }     
}     
?>    
この中で、属性と方法はまたpublicを使うことができます。 protected、 prvateの三つの異なるキーワードは属性と方法の作用範囲をさらに区別し、prvateのキーワードを持つ属性と方法は、ある種類の中の方法でしか呼び出せない。protectedのキーワードを持つ属性と方法は、自分以外に自分の父親と子供の種類の中の方法でも呼び出すことができます。publicキーワードを持つ属性と方法は、実用化後のオブジェクトから呼び出すことができます。このようにして最大の利点は、すべての属性と方法に説明の特徴を追加し、整理と組織コードの構造を容易にします。まずキーワードを飛ばして、後のstaticと一緒に話します。staticのキーワードはpublicと違っています。 protected、 prvateの別のタイプのキーワード(したがって、publicと一緒にすることができます。 protected、 prvateを重ねて使用する):

<?php     
class TEST     
{     
    public static function name()      
    {     
        echo 'value';     
    }     
}     
?>
staticキーワードを持つ方法は、クラスを実装しないで直接に「:」記号で呼び出すことができます。 protected、 prvateの取り組みは、区分権限を呼び出すこともできますが、一般的にはpublicとのパートナーであり、前述の定数キーconstは、publicであるべきです。 staticタイプなので、self:NAME,TEST:NAMEという形で常量を呼び出します。structdestructなどの方法は、すべてstaticに属します。クラスの構造部分で、最後に紹介した二つのキーワードはabstractとfinalで、abstractキーワードはこの種類が彼のサブクラスに上書きされなければならないと表しています。finalキーワードはこの種類が彼のサブクラスに上書きされないといけないと表しています。この二つのキーワードの機能は正反対です。これは後に紹介されています。クラスの使用方法は主に二つの方法があります。一つはnewキーワードを使うこと、もう一つは「:」符号を使うことです。PHPコード 

<?php     
class TEST     
{     
    public static function name()      
    {     
        echo 'value';     
    }     
}     
// 1: new      
$test = new TEST;     
$test->name();     

// 2: “::”      
TEST::name();     
?> 
   (1):newキーワードを使って実装され、上の$testはTESTクラスの実装によって生成されるオブジェクトであり、$test->name()は$testオブジェクトを呼び出すname方法と呼ばれる。2):newキーワードを使ってクラスを使う場合は、$thisを使ってクラス自体を指すことができます。3):「:」記号を使用する前提は、方法がstaticキーワードを有するものでなければならない。newキーワードを使用する場合、呼び出される方法は、publicキーワードを持たなければならない。 protected、 prvateのいずれかのキーワードは、デフォルトではpublicである。記号を使用する時、方法は何度も使う間に共有します。PHPコード

<?php     
class TEST1     
{     
    public $name = 0;     
    public function name()      
    {     
        $this->name = $this->name + 1;     
    }     
}     

$test1 = new TEST1;     
$test2 = new TEST1;     
$test1->name(); //$name1 == 1     
$test2->name(); //$name1 == 1     

/*--------------------------------------------*/    

class TEST2     
{     
    public static $name = 0;     
    public static function name()      
    {     
        TEST2::$name = TEST2::$name + 1;     

    }     
}     
TEST2::name(); // $name == 1     
TEST2::name(); // $name == 2     
?>    
類の関係:クラスとクラスの関係は主に抽象的で、インターフェースと継承があります。PHPコード 

<?php     
abstract class TEST1 //       
{     
    abstract public function name1();     
    public function name2()     
    {     

    }     
}     

class TEST2 extends TEST1 implements TEST3 //       
{     
    public function name1()     
    {     

    }     
}     

interface TEST3 //       
{     
    public function name2();     
}     
?>   
(1)abstractキーワードを持つクラスは抽象類であり、abstractキーワードを持つ方法は抽象的な方法であり、抽象的な種類の中の抽象的な方法は、必ずサブクラスに上書きされます。2)インタフェースというキーワードを持つクラスは、インタフェースであり、インタフェースはいかなる方法を実現することが許されず、インタフェースのすべての方法は、サブクラスに上書きしなければなりません。3)付き クラスA extens クラスB または クラスA implements クラスB という文字が継承されています。extensは他のクラスを継承すると表しています。implementsはもう一つのインターフェースを継承すると表しています。一回はextens一つの種類しかできませんが、implements複数のインターフェースができます。4)抽象類、インターフェース、および最終的な継承と実現の方法は、すべてpublicのものでなければならない。継承の過程で、子類は親類の同名の方法を上書きします。この場合、子類で父類を呼び出す方法が必要であれば、parentキーワードまたは類名を使って「:」符号をつけて呼び出すことができます。PHPコードです。 

<?php     
class TEST1 extends TEST2     
{     
    public function name()     
    {     
        echo parent::name2();     
        echo TEST2::name2();     
    }     
}     
class TEST2     
{     
    public function name2()     
    {     
        echo 'value2';     
    }     
}     
$test = new TEST1;     
$test->name();     
?>  
  ここでもう一つの説明をします。「方法はクラスの中での役割であり、一つの役割はインスタンス化されていない場合に定数を呼び出します。対象と対象の関係は主に「=」が等しく、「===」が全て等しく、clone:PHPコード<?php     クラス TEST     {         public 機能 name()         {         }     }     $test 1 = new TEST;     $test 2 = new TEST;     $test 3 = $test 1;     echo $test 1 == $test 2 ? true : false; // true     echo $test 1 == $test 3 ? true : false; // true     echo $test 2 == $test 3 ? true : false; // true     echo $test 1 === $test 2 ? true : false; // false     echo $test 1 === $test 3 ? true : false; // true     echo $test 2 === $test 3 ? true : false; // false     ?>    (1)二つの種類は同じ属性と方法を持っている限り、「=」に等しいです。2)二つの種類は同じ対象を指す必要があります。cloneは特殊です。上記の例では$test 3です。 = $test 1のプロセスは与えられたわけではない。 $test 3 一つ $test 1 対象のコピーではなく $test 3 指しました $test 1は、必ず$test 1のコピーを得るためには、cloneキーワードを使用しなければなりません。PHPコード

<?php     
$test3 = clone $test1;     
?>    
類のフック:__autload:関数名であり、クラスの外部で使う唯一のフックであり、対象を実用化する際に、あらかじめクラスにロードしていないと、このフックを呼び出すことができます。constructはクラスで例話される時に、呼び出されたフックは、いくつかの初期化操作ができます。destructはクラスが破壊された時に呼び出されたフックです。コールは、オブジェクトが存在しない方法を呼び出そうとしたときに、呼び出されたフックを呼び出す。sleepはserialize()関数を使って一つのクラスをシリアルで操作すると、このフックを呼び出します。wakeupはunserialize()関数を使って一つのクラスを逆シーケンスにすると、このフックを呼び出します。tostringは、オブジェクトが文字列に変換されると、このフック(たとえばechoの場合)を呼び出します。setstateがvar_を呼び出すとexport()関数がクラスを操作する時、このフックを呼び出します。cloneは、一つのクラスをcloneキーでコピー操作すると、このフックを呼び出します。getはクラスの中の属性値を取得すると、このフックを呼び出します。セットはクラスの中の属性値を設定する時、このフックを呼び出します。issetは、クラスの属性値をisset()関数を使って判定すると、このフックを呼び出します。unsetはunset()関数を使って一つの属性値を破壊する時、このフック類のテクニックを呼び出します。例で一つの種類を話す時に、このような形を使って___u uに上げてもいいです。constructフック伝達パラメータ:PHPコード 

<?php     
class TEST     
{     
    public function __construct($para)     
    {     
        echo $para;     
    }     
}     

$test = new TEST('value'); //   value     
?>   
foreach()関数はクラスまたはオブジェクトの属性を遍歴するために使用できます。遍歴する時はまずpublicを判断します。 protected、 prvateの場合、PHPコード

<?php     
class TEST     
{     
    public $property1 = 'value1';     
    public $property2 = 'value2';     
    public $property3 = 'value3';     

    public function name()     
    {     
        foreach($this as $key => $value)     
        {     
            print "$key => $value
";     
        }     
    }     
}     

$test = new TEST;     
foreach($test as $key => $value)     
{     
    print "$key => $value
";     
}     
$test->name();     
?>    
はクラスのメソッドにパラメータを渡す時に、パラメータを強制的に判定することができます。ここでは配列と対象に対する判定のみをサポートします。PHPコード

<?php     
class TEST1     
{     
    public function name( TEST2 $para )     
    {     

    }     
}     

class TEST2     
{     

}     

$test2 = new TEST2;     
$test1 = new TEST1;     

$test1->name('value'); //  , TEST2      
$test1->name($test1); //       
?>    
はphp 4に対応する文法:php 5の種類は下互換php 4です。これらのphp 4時代の文法も継承されています。ただし、php 5の環境での使用は勧められません。1)varプリセット属性を使用すると、自動的にpublicに変換されます(2)構造関数としてクラス名を使い、__uconstruct構造方法の場合、構造関数としてクラス名と同じ関数を探します。