PHPでのオブジェクト向け

6301 ワード

オブジェクト向けプログラミングOOP、
すべてのオブジェクトが核心であり、プロジェクトにどのようなオブジェクトが必要なのか、各オブジェクトにどのような機能が実現できるのかに注目しています.コンセプト:クラス:同じプロパティと同じ動作オブジェクトを持つ総称;例えば:学生、コンピュータ、---学生の属性(名前、年齢、住所)は、どのような属性があるかしか知らず、具体的な値を知らない.オブジェクトおぶじぇくと:プロパティと操作プロパティの動作の集合体;特定の属性値を知ることができます.
プロセス向け
主な実装機能
クラスの宣言
1.クラスの定義:
class   {
        
        
}

2.オブジェクト$obj=new Rect()を作成します.
class Rect{
//      
    var $width=0;
    var $height=0;
//    ,     
function getLen(){
    //$this          ,         :->,$this->width,       width  
    return ($this->width+$this->height)*2;
}
    
}
//    
$rect1=new Rect();//       
$rect1->width=40;//          
$rect1->height=40;
$len=$rect1->getLen();//        ,        ;
echo 'rect1   :'.$rect1->width.'  :'.$rect1->height.'   :'.$len;

クラスごとに__がありますtoString(){}オブジェクトを文字列に変換し、returnは変換結果を返します.
文字列を配列に変換する:explode(セパレータ、文字列)配列を文字列に変換する:join(コネクタ、配列)
構築方法
__construct([パラメータリスト]){}//構築方法--オブジェクトの作成時に自動的に呼び出され、主にオブジェクトの初期化に使用されます.
ぶんせきほう
__destruct([パラメータリスト]){}//オブジェクトが破棄されたときに自動的に実行され、リソースとゴミオブジェクトを解放します(ゴミオブジェクトがオブジェクトに対応する参照名がない場合、またはオブジェクトが破棄された場合)
class Person{
    var $name;
    var $pwd;
    var $telephone;
    function __construct($name,$password,$tel){
        //    --              ,         
        $this->name=$name;
        $this->psw=$password;
        $this->telephone=$tel;
        $this->introduce();//         
    }

    function introduce(){
        echo '    :'.$this->name.'    '.$this->psw;
    }
    function __destruct(){
        echo '
'; echo $this->name.'
'; } } $jack=new Person('jack','aaaa','123234');//jack aaaa var_dump($jack); //unset($jack);// , ; $jam=new Person('jam','bbbb','2222');//jam bbbb // , , jam, jack; ;

点クラスを作成します(任意の2点間の距離を計算する式は、[A(x 1,y 1)、B(x 2,y 2)]
//この2点間の距離を計算する:((x 1-x 2)2+(y 1-y 2)2)開根)pow(x,y),sqrt(144)
class point{
    var $x;
    var $y;
    function __construct($x,$y){
        $this->x=$x;
        $this->y=$y;
    }
    function dis($point){
        return sqrt(pow($point->x-$this->x,2)+pow($point->y-$this->y,2));
    }
}

$point2=new point(10,50);
$point1=new point(10,90);
echo $point1->dis($point2);//40

オブジェクトのフィーチャー->カプセル化
セキュリティの高い情報を隠す.アクセス制御子によってアクセス制御子を実現する:private、protected、publicは方法と属性を修飾するために使用され、主に彼らの可視性を制御し、属性に置く.方法の前にprivate:プライベートで、本クラスだけが使用できる.protected:保護され、このクラスの中性子クラスのみが使用できます.public:共通、本クラス、サブクラス、クラス外部で使用できます.
varキーワードは属性を修飾するしかなく、方法を修飾することができず、publicと同じである.
マジックメソッド_set(),__get()__call(){}
  • __set($name,$value)---オブジェクトが存在しない属性を設定した場合、または権限のない属性を設定した場合に自動的にこのメソッドを呼び出すには、属性名および属性値
  • を受信するために2つのパラメータが必要です.
  • __get($name)---オブジェクトが存在しない属性にアクセスしたとき、または権限のない属性にアクセスしたときに自動的にこのメソッドが呼び出されます.
  • __call($name,$arguments)**
  • __call($name,$arguments)---オブジェクトが存在しないメソッドまたはアクセス権限のないメソッドを呼び出すと自動的に呼び出され、$name---メソッド名、$argumentsが受信するのはメソッド伝達パラメータであり、配列**
  • である
  • _CallStaric($name,$arguments)存在しない静的メソッドを呼び出すと**
  • が呼び出されます.
    property_exists(CLASS,$name)は、クラスに指定された属性が定義されていることを検出します.class_exists(クラス名)クラスが存在するかどうかを検出is_file(ファイルパス)検出ファイルにmethod_が存在するか否かexists(クラス名|対象,メソッド名),メソッド名が存在するか否かを判断する_CLASS_現在のクラス名を取得_METHOD_現在のメソッド名//クラスを取得します.オブジェクトの中でメソッドと呼ばれ、外は関数です.FUNCTION_現在の関数名trigger_を取得error()
    class Img{
        private $src = '';
        private $width;
        private $height;
        public function __construct($src,$w,$h){
            $this->checkSrc($src);
            $this->checkNum($w);
            $this->checkNum($h);
            $this->src = $src;
            $this->width = $w;
            $this->height = $h;
        }
    
        public function __set($name, $value){
            if(property_exists(__CLASS__,$name)){
                //            
                $fn = '';
                if($name=='src'){
                    $fn = 'checkSrc';
                }else if(array_search($name,['width','height'])!==false){
                    $fn = 'checkNum';
                }
                $this->$fn($value);
                $this->$name = $value;
            }
        }
    
        public function __get($name){
            if(property_exists(__CLASS__,$name)){
                return $this->$name;
            }
        }
    
        private function checkSrc($path){
            if(!is_file($path)){
                trigger_error($path.'     !',E_USER_ERROR);
            }
        }
    
        private function checkNum($num){
            if(!is_int($num)){
                trigger_error($num.'       !',E_USER_ERROR);
            }
        }
    }
    $img = new Img('upload/24.jpg',100,200);
    $img->src = 'upload/20.jpg';
    $img->width = 200;
    echo $img->width.'
    '; echo $img->src.'
    '; echo $img->path.'
    '; $img->height = 300; var_dump($img);
    class Shape{
    //    var $width;   //var         ,   public,    public
    //    public $height;
    //    public $width;
    //    public $height;
    //***  width height     ,            ,                   
        private $width;
        private $height;
    
        public function __construct($w,$h){
    //        echo __CLASS__;  //    
            $this->isInt($w);
            $this->isInt($h);
            $this->width = $w;
            $this->height = $h;
        }
    
        public function setValue($key,$value){
            //     
            if(property_exists(__CLASS__,$key)){
                //property_exists(  ,   )----              
                $this->isInt($value);
                $this->$key = $value;
            }
        }
    
        public function getArea(){
            return $this->width*$this->height;
        }
    
    
        public function justType(){
            return $this->width==$this->height?'   ':'   ';
        }
    
        private function isInt($value){
            if(!is_int($value)){
                trigger_error($value.'    ,     ',E_USER_ERROR);  //trigger_error(msg)----        
            }
        }
    }
    
    $s1 = new Shape(30,20);
    echo $s1->getArea().'
    '; $s1->setValue('width',50); $s1->setValue('height',10); echo $s1->getArea().'
    ';