Heim  >  Artikel  >  Backend-Entwicklung  >  Analysieren Sie die drei Hauptmerkmale der objektorientierten PHP-Methode

Analysieren Sie die drei Hauptmerkmale der objektorientierten PHP-Methode

巴扎黑
巴扎黑Original
2017-06-26 15:20:331532Durchsuche
class BenHang extends Card{     /*构造函数与及构造的继承*/ function __construct($cardno,$pwd, $name,$money){
         parent::__construct($cardno,$pwd, $name,$money);
     }    
     function take($money){         echo "本行取款{$money}没有手续费·····<br>";
     }function zhuan($money){         echo "本行转账{$money}·····<br>";
     }
    
 }$benhang=new BenHang(123,344,444,444);$benhang->check();$benhang->take(234);$benhang->zhuan(4555);/*其他银行卡的类*/class Qita extends Card{function __construct($cardno,$pwd, $name,$money){
         parent::__construct($cardno,$pwd, $name,$money);
     }    function take($money){         echo "非本行取款{$money}有手续费2元·····<br>";
     }
}$qita=new Qita(123,344,444,444);$qita->check();$qita->take(99);

                                                                                                                                                                        🎜> 1. Wie implementiert man die Vererbung?

Verwenden Sie das Schlüsselwort „extends“ für die Unterklasse, damit die Unterklasse die übergeordnete Klasse erben kann.

Klasse Student verlängert Person{}

2. Was ist bei der Durchführung einer Vererbung zu beachten?

① Unterklassen können nur nicht private Eigenschaften der übergeordneten Klasse erben.

②Nachdem eine Unterklasse eine übergeordnete Klasse geerbt hat, entspricht dies dem Kopieren der Eigenschaften und Methoden der übergeordneten Klasse in die Unterklasse, die direkt mit $this aufgerufen werden kann.

③ PHP kann nur eine einzelne Vererbung unterstützen und unterstützt nicht die Vererbung mehrerer Klassen durch eine Klasse. Aber eine Klasse führt eine mehrstufige Vererbung durch; Die Klasse hat sowohl Chengnian-Klassen- als auch Personenklasseneigenschaften und -methoden von

3. Methodenüberschreibung (Methodenumschreibung)

Bedingung ① Unterklasse Von der übergeordneten Klasse erben.

Bedingung ② Die Unterklasse überschreibt die vorhandene Methode der übergeordneten Klasse.

Das Erfüllen der beiden oben genannten Bedingungen wird als Methodenabdeckung bezeichnet. Wenn eine Unterklasse nach dem Überschreiben eine Methode aufruft, wird die eigene Methode der Unterklasse aufgerufen.

Ebenso können Unterklassen zusätzlich zu Methodenüberschreibungen auch Attribute mit demselben Namen wie die übergeordnete Klasse für Attributüberschreibungen haben.

4. Wenn die Unterklasse die Methode der übergeordneten Klasse überschreibt, wie ruft man dann die Methode der übergeordneten Klasse mit demselben Namen in der Unterklasse auf?

partent::method name();

Wenn daher eine Unterklasse eine übergeordnete Klasse erbt, muss sie The sein Der erste Schritt bei der Konstruktion besteht darin, den Konstruktor der übergeordneten Klasse zum Kopieren aufzurufen.

       function __construct($name,$sex,$school){

             parent::__construct($name,$sex);

             $this->school = $school;

       }

实例一枚:

class Person{protected $name;public $sex;
        function __construct($name,$sex){     //声明构造函数            $this->name = $name;
            $this->sex = $sex;
        }
        function say(){
            echo "我叫{$this->name},我是{$this->sex}生!<br>";
        }
    }    class Student extends Person{                       //子类继承父类public $school;                                           function __construct($name,$sex,$school){          //子类的构造函数            parent::__construct($name,$sex);        //调用父类构造进行复制$this->school = $school;
        }
        
        function program(){
            echo "PHP真好玩!我爱PHP!PHP是世界上最好用的编程语言!<br>";
        }
        
        function say(){
            parent::say();                      //重写父类的同名方法echo "我是{$this->school}的";
        }
    }
    
    $zhangsan = new Student("张三","男","起航");
    $zhangsan->say();
    $zhangsan->program();

 

二、封装

  1、什么是封装?
   通过访问修饰符,将类中不需要外部访问的属性和方法进行私有化处理,以实现访问控制。
【注意】是实现访问控制,而不是拒绝访问。 也就是说,我们私有化属性之后,需要提供对应的方法,让用户通过我们提供的方法处理属性。
2、封装的作用?
    ①使用者只关心类能够提供的功能,而不必关心功能实现的细节!(封装方法)
    ②对用户的数据进行控制,防止设置不合法数据,控制返回给用户的数据(属性封装+set/get方法)
  3、实现封装操作?
   ① 方法的封装
    对于一些只在类内部使用的方法,而不像对外部提供使用。那么,这样的方法我们可以使用private进行私有化处理。
     private function formatName(){}        //这个方法仅仅能在类内部使用$this调用
         function showName(){
          $this -> formatName();
       }
②属性的封装+set/get方法
Um das Setzen und Lesen von Attributen zu steuern, können Sie die Attribute privatisieren und von Benutzern verlangen, sie über die von uns bereitgestellten Set/Get-Methoden festzulegen
> privat $age;
function setAge($age){
$this->age = $age;
}
function getAge(){
return $this->age;
}
$object-> getAge();
$object-> 12);
③ Attributkapselung + magische Methode
private $age;
function __get($key){
return $this->$key;
}
function __set($key,$value){
$this->$key=$value;
}
$Object->age; // Automatisch beim Zugriff auf die privaten Eigenschaften des Objekts Aufruf die magische Methode __get() und übergeben Sie den Namen der aufgerufenen Eigenschaft an die Methode __get()
🎜>
// Beim Festlegen der privaten Attribute des Objekts, Rufen Sie automatisch die magische Methode __set() auf und übergeben Sie den festgelegten Attributnamen und den Attributwert an die Methode __set()
【 注意】在魔术方法中,可以使用分支结构,判断$key的不同,进行不同操作。
  4、关于封装的魔术方法:
     ① __set($key,$value):给类私有属性赋值时自动调用,调用时给方法传递两个参数:需要设置的属性名、属性值;
     ② __get($key):读取类私有属性时自动调用,调用时给方法传递一个参数:需要读取的属性名;
     ③ __isset($key):外部使用isset()函数检测私有属性时,自动调用。
       >>> 类外部使用isset();检测私有属性,默认是检测不到的。false
       >>> 所以,我们可以使用__isset();函数,在自动调用时,返回内部检测结果。
       function __isset($key){
              return isset($this->$key);
            }
当外部使用isset($对象名->私有属性);检测时,将自动调用上述__isset()返回的结果!
    ④ __unset($key):外部使用unset()函数删除私有属性时,自动调用;
       function __unset($key){
           unset($this->$key);
           }
  当外部使用unset($对象名->私有属性);删除属性时,自动将属性名传给__unset(),并交由这个魔术方法处理。
实例一枚
class Person{public $name;public $age;public $sex;
        function __construct($name, $age,$sex){
            $this->name=$name;
            $this->setAge($age);
            $this->setSex($sex);
        }
        function setAge($age){if($age>=0&&$age<=120){return $this->age=$age;
            }else{
                die("年龄输入有误!!!");
            }
        }
        function setSex($sex){if($sex=="女"||$sex=="男"){return    $this->sex=$sex;
            }else{
                die("性别输入有误!!!");
            }
        }
        function say(){
            echo "我的名字叫{$this->name},我的年龄{$this->age},我的性别是{$this->sex}<br>";
        }
    }class Work extends Person{private $position;
        function __construct($name, $age,$sex,$position){
            parent::__construct($name, $age,$sex);
            $this->job=$job;
            $this->setPosition($position);
        }
        function setPosition($position){
            $arr=['总监','董事长','程序员','清洁工'];if(in_array($position, $arr)){return $this->position=$position;
            }else{
                die("不存在该职位");
            }
        }        
        function __set($key,$value){if($key=="age"){return    parent::setAge($value);
            }
            elseif($key=="sex"){return    parent::setSex($value);
            }
            elseif($key=="position"){return $this->setPosition($value);
            }return $this->$key=$value;
        }
        
        function say(){
            parent::say();
            echo "我的职位是{$this->position}";
        }
     }
     
    $zhangsan=new Work("张三",22,"男","总监");
    $zhangsan->setSex("女");
    $zhangsan->setAge(30);//  $zhangsan->setPosition("董事长");$zhangsan->position="董事长";
    $zhangsan->name="lisi";$zhangsan->say();

 

三.多态
  3.1、什么是多态?
     多态实现多态的前提是实现继承。
      1.一个类被多个子类继承,如果这个类的某个方法在多个子类中表现出不同的功能,我们称这种行为为多态。在PHP中的方法重写,
     2.实现多态的必要途径:
      ⑴子类继承父类;
      ⑵重写父类方法;
      ⑶父类引用指向子类对象;
     
/*墨盒接口
 * 纸张接口*/
 interface InkBox{     function color();
 }interface Paper{     function sizes();
 }class Computer{function fangfa(InkBox $a,Paper $b){     //父类引用echo "即将开始打印····<br>";    $a->color();$b->sizes();echo "打印结束···<br>";    
    
  }
}class Color implements InkBox{function color(){echo "正在装载彩色墨盒<br>";echo "实现彩色墨盒<br>";
    }
}class White implements InkBox{function color(){echo "正在装载黑白墨盒<br>";    echo "实现黑白墨盒<br>";
    }
}class A4 implements Paper{function sizes(){echo "正在加载A4纸张<br>";echo "实现A4纸张<br>";
    }
}class A5 implements Paper{function sizes(){echo "实现A5纸张<br>";
    }
}$com=new Computer();//创建对象$com->fangfa(new Color(),new A4());//子类对象

 

 

Das obige ist der detaillierte Inhalt vonAnalysieren Sie die drei Hauptmerkmale der objektorientierten PHP-Methode. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn