PHP中類と対象機能、用法実例解読

7087 ワード

この例では,PHPにおけるクラスとオブジェクトの機能,用法について述べる.皆さんの参考にしてください.具体的には以下の通りです.
1.クラスとオブジェクト
クラスはオブジェクト向けのプログラム設計の基本概念であり、東西の構造記述であり、抽象的な概念である.対象は一つのものの具体的な例であり、具体的なものである.
オブジェクトはnewキーワードによってインスタンス化されます.例えば、自動車は1つのクラスとして抽象化することができ、自動車は名前、タイヤ、速度、重量などの属性を持ち、シフト、前進、後退などの操作方法があります.

//        
class Car {
  $name = '  ';
  function getName() {
    return $this->name;
  }
}
//    new         
$car = new Car();
echo $car->getName();

2.属性とオブジェクト
クラスで定義された変数を属性と呼びます.属性宣言は、キーワードpublic、protectedまたはprivateで始まり、その後、通常の変数宣言で構成されます.プロパティの変数は、初期化のデフォルト値を設定できます.デフォルト値は定数でなければなりません.
メソッドはクラス内のfunctionであり,メソッドと関数の違いが分からないことが多いが,プロセス向けのプログラム設計ではfunctionを関数,オブジェクト向けではfunctionをメソッドと呼ぶ.
アクセス制御のキーワードの意味は次のとおりです.
  • public:公開されており、どこでも
  • にアクセスできます.
  • protected:保護された、クラス内自体、そのサブクラスと親クラスは
  • にアクセスできます.
  • private:プライベート、クラス内自身が
  • にアクセス可能
    クラス属性のアクセス制御は定義する必要があります.すなわち、キーワードを書く必要があります.3つのクラスメソッドがキーワードを書かないと、デフォルトは共通です.
    
    class Car {
      public $speed = 0;
      //  speedUp  , speed 10
      public function speedUp(){
        $this->speed += 10;
      }
    }
    //     
    $car = new Car();
    //              
    $car->speedUp();
    echo $car->speed;
    

    3.コンストラクション関数と解析関数
    PHP 5はクラスで使用できる_construct()は、コンストラクション関数を持つクラスを定義し、オブジェクトが作成されるたびに呼び出されるため、オブジェクトが作成されるたびに初期化作業を行うためによく使用されます.
    サブクラスで__が定義されている場合constructでは親クラスは呼び出されません.constructは、親クラスのコンストラクション関数を同時に呼び出す必要がある場合はparent:_を使用する必要があります.construct()明示的な呼び出し.
    同様に、PHP 5は構造関数をサポートし、__を使用する.destruct()は、オブジェクトのすべての参照が削除されたり、オブジェクトが明示的に破棄されたりしたときに実行される関数を指します.
    
    class Car {
      function __construct() {
        print "        
    "; } function __destruct() { print "
    "; } } $car = new Car(); // echo ' , car
    '; unset($car); //

    PHPコードの実行が完了すると、自動的にオブジェクトが回収されて破棄されるので、一般的には明示的にオブジェクトを破棄する必要はありません.
    4.静的属性と静的方法
  • 静的プロパティ:
  • 
    public / protected / private static $   
    

    クラスをインスタンス化せずに、直接クラス名を呼び出します:$変数名ただしインスタンス化後、オブジェクト->$変数名の使用は許可されません.
  • 静的方法
  • 
    public / protected / private static function    ()
    

    クラスをインスタンス化せずに、直接クラス名を呼び出します::メソッド名()をインスタンス化すると、オブジェクト->メソッド名()静的メソッドで$this擬似変数は使用できません.self,parent,staticを使用して、静的メソッドと属性を内部で呼び出すことができます.
    
    class Car {
      private static $speed = 10;
      
      public static function getSpeed() {
        return self::$speed;
      }
      
      public static function speedUp() {
        return self::$speed+=10;
      }
    }
    class BigCar extends Car {
      public static function start() {
        parent::speedUp();
      }
    }
    
    BigCar::start();
    echo BigCar::getSpeed();
    

    コンストラクション関数がプライベートメソッドとして定義されている場合、オブジェクトの直接インスタンス化は許可されません.この場合、一般的に静的メソッドでインスタンス化され、設計モードでは、単一のモードでグローバルに一意のオブジェクトしか許可されていないなど、オブジェクトの作成を制御する方法がよく使用されます.
    
    class Car {
      private function __construct() {
        echo 'object create';
      }
    
      private static $_object = null;
      public static function getInstance() {
        if (empty(self::$_object)) {
          self::$_object = new Car(); //            ,          
        }
        return self::$_object;
      }
    }
    $car = new Car(); //            
    $car = Car::getInstance(); //             
    

    5.継承
    継承はオブジェクト向けのプログラム設計でよく使われる特性であり、自動車は比較的大きなクラスであり、私たちもベースクラスと呼ぶことができる.それ以外に、自動車はトラック、乗用車、東風、BMWなどに分けられる.これらのサブクラスは多くの同じ属性と方法を持っているため、継承自動車クラスを採用してこれらの属性と方法を共有し、コードの多重化を実現することができる.
    
    class Car {
      public $speed = 0; //        0
      
      public function speedUp() {
        $this->speed += 10;
        return $this->speed;
      }
    }
    //    Truck ,  Car ,   speedUp  ,     50
    class Truck extends Car{
      public function speedUp(){
        parent::speedUp();
        $this->speed += 50;
        return $this->speed;
      }
    }
    
    $car = new Truck();
    $car->speedUp();
    echo $car->speed;
    

    5.重荷
    PHPでのリロードとは,属性とメソッドを動的に作成することであり,マジックメソッドによって実現される.
  • 属性のリロードパス_set,__get,__isset,__unsetは、属性が存在しない値の付与、属性が設定されているか否かの読み取り、属性の破棄をそれぞれ実現する.
  • 
    class Car {
      private $ary = array();
      
      public function __set($key, $val) {
        $this->ary[$key] = $val;
      }
      
      public function __get($key) {
        if (isset($this->ary[$key])) {
          return $this->ary[$key];
        }
        return null;
      }
      
      public function __isset($key) {
        if (isset($this->ary[$key])) {
          return true;
        }
        return false;
      }
      
      public function __unset($key) {
        unset($this->ary[$key]);
      }
    }
    $car = new Car();
    $car->name = '  '; //name         
    echo $car->name;
    if ($car->age){
      echo ' ';
    }else{
      echo ' ';
    }
    unset($car->name);
    var_dump($car->name);
    
  • メソッドのリロードパス_Callは、呼び出しが存在しないメソッドを実装すると、パラメータ呼び出し__に変換されます.callメソッドは、存在しない静的メソッドを呼び出すときに使用されます.callStaticリロード.
  • 
    class Car {
      public $speed = 0;
      
      public function __call($name, $args) {
        if ($name == 'speedUp') {
          $this->speed += 10;
        }
      }
    }
    $car = new Car();
    $car->speedUp(); //             
    echo $car->speed;
    

    6.高度な特性
    オブジェクト比較は、同じクラスの2つのインスタンスのすべての属性が等しい場合、比較演算子==を使用して判断することができ、2つの変数が同じオブジェクトの参照であるか否かを判断する必要がある場合は、全等演算子==を使用して判断することができる.
    
    class Car {
    }
    $a = new Car();
    $b = new Car();
    if ($a == $b) echo '==';  //true
    if ($a === $b) echo '==='; //false
    

    オブジェクトコピー、特殊な場合、キーワードcloneでオブジェクトをコピーできます.cloneメソッドが呼び出され、このマジックメソッドでプロパティの値が設定されます.
    
    class Car {
      public $name = 'car';
      
      public function __clone() {
        $obj = new Car();
        $obj->name = $this->name;
      }
    }
    $a = new Car();
    $a->name = 'new car';
    $b = clone $a;
    var_dump($b);
    

    オブジェクトシーケンス化は、serializeメソッドでオブジェクトを文字列にシーケンス化し、データを格納または転送し、必要に応じてunserializeで文字列をオブジェクトに逆シーケンス化して使用できます.
    
    class Car {
      public $name = 'car';
    }
    $a = new Car();
    $str = serialize($a); //         
    echo $str.'
    '; $b = unserialize($str); // var_dump($b);

    PHPに関する詳細について興味のある読者は、「phpオブジェクト向けプログラム設計入門チュートリアル」、「PHP配列(Array)操作テクニック大全」、「PHP基本文法入門チュートリアル」、「PHP演算と演算子用法総括」、「php文字列(string)用法総括」、「php+mysqlデータベース操作入門チュートリアル」および「php一般データベース操作テクニック要約」
    ここで述べたことが皆さんのPHPプログラム設計に役立つことを願っています.