PHPオブジェクト向けプログラミングのパッケージ性


本編概要:
  • 1. プライベートメンバーとプライベートメンバーへのアクセスを設定します.
  • 2. マジックメソッド_set();
  • 3. マジックメソッド_get();
  • 4. マジックメソッド_isset();
  • 5. マジックメソッド_unset().

  • 1.プライベートメンバーとプライベートメンバーへのアクセスを設定します.
  • パッケージの修飾子
  • パッケージ性は、オブジェクト向けプログラミングにおける3つの特性の1つである.カプセル化は、メンバー属性またはメンバーメソッドがクラスの外部にアクセスできないようにするのではなく、オブジェクト内のメンバー属性とメンバーメソッドにアクセス修飾子を付けて、メンバーへのアクセス制御(アクセス拒否ではなく)を可能な限りオブジェクトの内部詳細を非表示にします.
  • 簡単に言えば、パッケージ性は、私たちが宣言したメンバー属性またはメンバーメソッドを隠すことです.
  • PHP 5では、以下の3種類のアクセス修飾子がサポートされている.public(公開、デフォルト)、2.private(プライベート)、3.protected(保護された)
  • プライベートメンバーの設定
  • メンバー属性またはメンバーメソッドを宣言するときにprivateキーワード修飾を使用すると、メンバーのプライベートパッケージが実現されます.

  • #   :
    
    #           ,                    
       class person{
    			private $name;
    			private $age;
    			private function say(){
    				……
    			}
       }
    
    
  • プライベートメンバーへのアクセス
  • カプセル化されたメンバーは、オブジェクトの外部に直接アクセスできず、オブジェクトの内部メソッドで$thisアクセスしか使用できません.

  • #   :
    	class person{
    				private $name;
    
    				public function say(){
    						return $this -> name;
    				}
    		}
    
    

    例:person.class.php
    
    class person{
    
        public $name = "zhangsan";		//    
        private $age = 18;				//    
        protected $gender = 'male';     //     (        )
        //   PHP5      ,           
        //var $height;        			//            ,    var    ,        。
    
        //        ,           
        private function getName(){
            return $this -> name;
        }
    
        //         ,           
        protected function getAge(){
            return $this -> age;
        }
    
        //        ,           
        public function getGender(){
            return $this -> gender;
        }
    
        //    ,   ,                    
        public function say(){
            return $this -> getName() . $this->getAge() . $this->getGender();
        }
    }
    
    $person = new person();
    echo $person -> name;		//                
    echo "
    "
    ; //echo $person -> age; // echo "
    "
    ; //echo $person -> gender; // //$person -> getName(); //$person -> getAge(); //echo $person -> getGender(); echo $person -> say();

    2.マジックメソッド_set();
  • の役割は、プライベート(private)を解決し、保護された(protected)メンバー属性がクラスの外部から
  • を付与することである.
  • には、$nameと$valueの2つのパラメータがあります.1番目のパラメータは、値を割り当てるメンバー属性名であり、2番目のパラメータは、このメンバー属性に割り当てる値
  • です.
  • マジックメソッドは手動で呼び出す必要はなく、一定のトリガ条件があります.プライベートおよび保護されたメンバーのプロパティに値を割り当てると、プログラムは自動的に
  • を呼び出します.
  • マジックメソッドはpublic
  • に修飾されます.
  • マジックメソッドは、メンバー属性をpublicに直接修飾すると、プログラムをよりよく制御することはできません.
    例:person.class.php
    
    class person{
    
        private $name;
        protected $age;
    
        public function set($name, $value){
        	//     $name    ,     private $name     ,                    
            $this -> $name = $value;
        }
    
        //      __set()                           **    **
        //      :         
        //      :    
        //   :              
        public function __set($name, $value){
            if($name == 'age' && $value > 30){
                $this -> $name = $value - 5;
            }else{
                $this -> $name = $value;
            }
        }
    }
    
    $person = new person();
    // $person -> set("name", "zhangsan");
    // $person -> set("age", 18);
    // var_dump($person);
    $person -> name = "lisi";
    $person -> age = 31;
    var_dump($person);
    
    

    3.マジックメソッド_get();
  • クラスの外部でプライベート(private)または保護された(protected)メンバー属性
  • を得る.
    例:person.class.php
    
    class person{
    
        private $name;
        protected $age;
    
        public function __construct($name, $age){
            $this -> name = $name;
            $this -> age = $age;
        }
    
        public function get($name){
            return $this -> $name;
        }
    
        //      __get()                             
        //   :         
        //   :                。             
        public function __get($name){
            if($name == 'age')	return 18;
            
            return $this -> $name;
        }
    }
    
    $person = new person("zhangsan", 20);
    // echo $person -> age;
    // echo $person -> get("name");
    // echo "
    ";
    // echo $person -> get("age"); echo $person -> name; echo "
    "
    ; echo $person -> age;

    4.マジックメソッド_isset();
    例:person.class.php
    
    
    class person{
    
        private $name;
        protected $age;
    
        public function __construct($name, $age){
            $this -> name = $name;
            $this -> age = $age;
        }
    
        public function is_set($name){
            return isset($this -> $name);
        }
    
        //      __isset()           isset()                     
        //   :        
        //   :         false   true
        public function __isset($name){
            if($name == 'age')	 return false;
            
            return isset($this -> $name);
        }
    }
    
    $person = new person("zhangsan", 20);
    var_dump(isset($person -> name));
    var_dump(isset($person -> age));
    //
    var_Dump($person -> is_set("name"));
    var_dump($person -> is_set("age"));
    
    

    5.マジックメソッド_unset().
    例:person.class.php
    
    class person{
    
        private $name;
        protected $age;
    
        public function __construct($name, $age){
            $this -> name = $name;
            $this -> age = $age;
        }
    
        public function un_set($name){
            unset($this -> $name);
        }
    
        //      __unset()           unset()                    
        //   :         
        //   :                
        public function __unset($name){
            if($name == 'name')	return;
            
            unset($this -> $name);
        }
    
    }
    
    $person = new person("zhangsan", 20);
    unset($person -> name);
    unset($person -> age);
    // $person -> un_set("name");
    // $person -> un_set("age");
    var_dump($person);