Maison développement back-end tutoriel php Héritage, polymorphisme, interface, classe abstraite, exemple de méthode abstraite tutoriel en PHP orienté objet

Héritage, polymorphisme, interface, classe abstraite, exemple de méthode abstraite tutoriel en PHP orienté objet

Jun 29, 2017 am 09:29 AM
php 多态 继承

Cet article présente principalement les caractéristiques de l'orienté objet dans le tutoriel d'introduction PHP, et analyse l'héritage, le polymorphisme, l'interface, les Classes abstraites et méthodes abstraites, etc. Amis qui si vous en avez besoin, vous pouvez vous référer à Les exemples de cet article décrivent les fonctionnalités orientées objet de PHP. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :

Demo1.php

Demo2.php
<?php
  header(&#39;Content-Type:text/html; charset=utf-8;&#39;);
  //创建一个电脑类
  class Computer {
    //什么叫做类内,就是创建类的花括号内的范围叫做类内,其他地方则类外。
    //public 是对字段的公有化,这个字段类外即可访问,赋值和取值
    public $_name = &#39;联想&#39;;
  }
  $computer = new Computer();
  $computer -> _name = &#39;Dell&#39;;
  echo $computer->_name;
?>
Copier après la connexion

Demo3.php
<?php
  header(&#39;Content-Type:text/html; charset=utf-8;&#39;);
  class Computer {
    //private 是私有化,即对字段进行封装的操作,类外无法访问,取值和赋值都不能操作
    private $_name = &#39;联想&#39;;
  }
  $computer = new Computer();
  echo $computer->_name;
?>
Copier après la connexion

Demo4.php
<?php
  header(&#39;Content-Type:text/html; charset=utf-8;&#39;);
  class Computer {
    private $_name = &#39;联想&#39;;
    //这个时候我采用一个公共对外的方法来访问私有字段
    //因为私有字段只能在类内访问,而对外的公共方法是类内的。
    //更而公共方法又是公共的,所以类外又可访问。
    public function _run(){
      //字段在类内调用的时候必须是类 -> 字段,而$_name只是一个普通变量而已。
      //字段在类外调用的方法是对象 -> 字段,而类内就必须使用 Computer -> _name
      //但是在本类中,可以使用一个关键字来代替字来代替 Computer ,那就是 $this
      echo $this ->_name;
    }
  }
  $computer = new Computer();
  $computer -> _run();
?>
Copier après la connexion

Demo5.php
<?php
  header ( &#39;Content-Type:text/html; charset=utf-8;&#39; );
  class Computer {
    private $name;
    private $model;
    private $cpu;
    private $keyboard;
    private $show;
    private $zb;
    //必须写个对外的入口,才可以取到
    public function getName() {
      return $this->name;
    }
    //必须写一个对内的入口,对私有字段进行赋值
    public function setName($name) {
      //这里的 $name 只是一个变量而已,参数而已
      //$this->name 才是类的字段
      $this->name = $name;
    }
  }
  $computer = new Computer ();
  echo $computer->getName();
  $computer->setName(&#39;Dell&#39;);
  echo $computer->getName();
?>
Copier après la connexion

Demo6.php
<?php
  header ( &#39;Content-Type:text/html; charset=utf-8;&#39; );
  class Computer {
    private $_name;
    private $_model;
    private $_cpu;
    //当类外的对象直接调用私有字段时,会跟着去检查是否有拦截器,
    //如果直接对 $_name 进行赋值,那么set 方法就会拦截住,就不会报错了。
    //采用拦截器进行赋值和取值
    //赋值
    private function set($_key,$_value){
      //采用$_key = &#39;_name&#39;,那么 $_value = &#39;联想&#39;;
      //$this ->_name = &#39;联想&#39;;
      $this ->$_key = $_value;
    }
    //取值
    private function get($_key){
      return $this -> $_key;
      //如果 $_key = &#39;_name&#39; 那么 $this -> _name;
      //如果 $_key = &#39;_cpu&#39; 那么 $this -> _cpu;
      //如果 $_key = &#39;_model&#39; 那么 $this -> _model;
    }
  }
  $computer = new Computer ();
  $computer->_name = &#39;联想&#39;;
  $computer->_cpu = &#39;四核&#39;;
  $computer->_model = &#39;i7&#39;;
  echo $computer->_name;
  echo $computer->_cpu;
  echo $computer->_model;
?>
Copier après la connexion

Demo7.php
<?php
  header ( &#39;Content-Type:text/html; charset=utf-8;&#39; );
  class Computer {
    private $_name;
    private $_model;
    private $_cpu;
    //set 和 get 方法私有了,还是可以执行,是因为
    //因为目前程序的指针已经在类内了。而类内可以执行封装的方法
    //类内执行私有方法,不会出现任何错误。
    //它只需要间接的拦截就可以了。拦截是在内类执行的。
    //说白了,set() 和 get() 是 PHP 内置的方法,具有一定的特殊性
    private function set($_key, $_value) {
      $this->$_key = $_value;
    }
    private function get($_key) {
      return $this->$_key;
    }
  }
  $computer = new Computer ();
  $computer->_name = &#39;联想&#39;;
  $computer->_cpu = &#39;四核&#39;;
  $computer->_model = &#39;i7&#39;;
  echo $computer->_name;
  echo $computer->_cpu;
  echo $computer->_model;
?>
Copier après la connexion

Démo8.php
<?php
  header ( &#39;Content-Type:text/html; charset=utf-8;&#39; );
  class Computer {
    const NAME = &#39;DELL&#39;;
  }
  //常量的输出方法 类::常量
  echo Computer::NAME;    //DELL
?>
Copier après la connexion

Démo9.php
<?php
  header ( &#39;Content-Type:text/html; charset=utf-8;&#39; );
  class Computer {
    public $_count = 0;
    public function _add(){
      $this -> _count++;  //$_count = $_count+1 $_count++
    }
  }
  //做一个累计的效果
  $computer1 = new Computer();
  $computer1 ->_add();
  $computer1 ->_add();
  $computer1 ->_add();
  echo $computer1 -> _count;
  echo &#39;<br />&#39;;
  $computer2 = new Computer();
  $computer2 ->_add();
  $computer2 ->_add();
  $computer2 ->_add();
  echo $computer2 -> _count;
?>
Copier après la connexion

Démo10.php
<?php
  header ( &#39;Content-Type:text/html; charset=utf-8;&#39; );
  class Computer {
    public static $_count = 0;
    public function _add(){
      //如果是静态成员字段,那么就应该用 self 来调用,而不是 $this
      self::$_count++;
    }
  }
  //做一个累计的效果
  $computer1 = new Computer();
  $computer1 ->_add();
  echo Computer::$_count;
  $computer1 ->_add();
  echo Computer::$_count;
  $computer1 ->_add();
  echo Computer::$_count;
  echo &#39;<br />&#39;;
  $computer2 = new Computer();
  $computer2 ->_add();
  echo Computer::$_count;
  $computer2 ->_add();
  echo Computer::$_count;
  $computer2 ->_add();
  echo Computer::$_count;
?>
Copier après la connexion

Démo11.php
<?php
  header ( &#39;Content-Type:text/html; charset=utf-8;&#39; );
  class Computer {
    public static $_count = 0;
    public static function _add(){
      self::$_count++;
    }
  }
  Computer::_add();
  Computer::_add();
  Computer::_add();
  echo Computer::$_count;
?>
Copier après la connexion

Démo12.php
<?php
  header ( &#39;Content-Type:text/html; charset=utf-8;&#39; );
  class Computer {
  }
  $computer = new Computer();
  echo $computer instanceof Computer;
?>
Copier après la connexion

Démo13.php
<?php
  header ( &#39;Content-Type:text/html; charset=utf-8;&#39; );
  //这是父类,电脑类
  class Computer {
    public $_name = &#39;联想&#39;;
    public function _run(){
      echo &#39;联想在运行!&#39;;
    }
  }
  //子类,笔记本电脑类
  class NoteComputer extends Computer {
  }
  $noteComputer = new NoteComputer();
  echo $noteComputer -> _name;
  $noteComputer -> _run();
?>
Copier après la connexion

Démo14.php
<?php
  header ( &#39;Content-Type:text/html; charset=utf-8;&#39; );
  class Computer {
    public $_name = &#39;联想&#39;;
    public function _run(){
      echo &#39;联想在运行!&#39;;
    }
  }
  class NoteComputer extends Computer {
    //我不需要父类的字段和方法,那么可以采用重写的方法覆盖掉父类的字段和方法
    public $_name = &#39;Dell&#39;;
    public function _run(){
      echo &#39;Dell在运行!&#39;;
    }
  }
  $noteComputer = new NoteComputer();
  echo $noteComputer -> _name;
  $noteComputer -> _run();
?>
Copier après la connexion

Démo15.php
<?php
  header ( &#39;Content-Type:text/html; charset=utf-8;&#39; );
  class Computer {
    //私有化,但是无法被子类继承,这个时候就应该用受保护的修饰符来封装
    protected $_name = &#39;联想&#39;;
    protected function _run(){
      return &#39;联想在运行!&#39;;
    }
  }
  class NoteComputer extends Computer {
    public function getTop() {
      echo $this->_name;
      echo $this->_run();
    }
  }
  $noteComputer = new NoteComputer();
  $noteComputer -> getTop();
?>
Copier après la connexion

Démo16.php
<?php
  header ( &#39;Content-Type:text/html; charset=utf-8;&#39; );
  class Computer {
    public $_name = &#39;联想&#39;;
    public function _run(){
      return &#39;联想在运行!&#39;;
    }
  }
  class NoteComputer extends Computer {
    //我子类已经覆盖了父类的字段和方法,
    //但是我又要调用父类的字段和方法,那怎么办呢?
    public $_name = &#39;Dell&#39;;
    public function _run(){
      echo &#39;Dell在运行!&#39;;
      echo parent :: _run();
    }
  }
  $noteComputer = new NoteComputer();
  echo $noteComputer -> _name;
  $noteComputer -> _run();
  //DellDell在运行!联想在运行!
?>
Copier après la connexion

Démo17.php
<?php
  header ( &#39;Content-Type:text/html; charset=utf-8;&#39; );
  //final 如果加在类前面,表示这个类不能被继承
// final class Computer {
// }
  class Computer {
    //final 如果加在方法前面,表示不能够重写些方法
    final public function _run(){
    }
  }
  class NoteComputer extends Computer {
    public function _run(){
    }
  }
  $noteComputer = new NoteComputer();
?>
Copier après la connexion

Démo18.php
<?php
  header ( &#39;Content-Type:text/html; charset=utf-8;&#39; );
  //创建一个抽象类,只要在 class 前面加上 abstract 就是抽象类了
  //抽象类不能够被实例化,就是创建对象
  //只在类里面有一个抽象方法,那么这个类必须是抽象类,类前面必须加上 abstract
  abstract class Computer {
    public $_name = &#39;联想&#39;;
    //抽象类里创建一个抽象方法
    //抽象方法不能够实现方法体的内容
    abstract public function _run();
    //我在抽象类里能否创建一个普通方法
    public function _run2(){
      echo &#39;我是父类的普通方法&#39;;
    }
  }
  //类不能够实现多继承,只支持单继承。
  //抽象类是给子类用来继承的,实现一种规范和资源的共享
  class NoteComputer extends Computer {
    //抽象类的抽象方法,子类必须重写,不然会报错。
    //抽象类里的普通方法不需要重写,子类会直接继承下来
    public function _run(){
      echo &#39;我是子类的方法&#39;;
    }
  }
  $noteComputer = new NoteComputer();
  $noteComputer -> _run();
  $noteComputer -> _run2();
  echo $noteComputer -> _name;
?>
Copier après la connexion

Démo19.php
<?php
  /*
   * 到底应该用抽象类还是接口呢
   * 如果你要继承多个接口的方法规范,那么就用接口好了。
   * 如果你要共享一个方法体内容,那么就用抽象类。
   * */
  header ( &#39;Content-Type:text/html; charset=utf-8;&#39; );
  //创建一个接口
  //接口也不能被实例化
  //接口是为了规范实现它的子类,以达到统一的目的。也可以共享数据
  interface Computer {
    //成员字段必须是变量
    const NAME = &#39;成员 &#39;;
    //接口里的所有方法都是抽象方法,不能够写方法体
    //并且接口的抽象方法不需要写 abstract
    public function _run();
    public function _run2();
  }
  interface Computer2 {
    public function _run3();
  }
  //子类继承接口的说法,叫做实现,接口可以多实现
  class NoteComputer implements Computer,Computer2 {
    public function _run() {
      echo &#39;我重写了run&#39;;
    }
    public function _run3() {
      echo &#39;我重写了run3&#39;;
    }
    public function _run2() {
      echo &#39;我重写了run2&#39;;
    }
  }
  $noteComputer = new NoteComputer();
  $noteComputer -> _run();
  $noteComputer -> _run2();
  $noteComputer -> _run3();
  echo NoteComputer::NAME;
  //接口 :: 常量
  //echo Computer::NAME;
?>
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

CakePHP travaillant avec la base de données CakePHP travaillant avec la base de données Sep 10, 2024 pm 05:25 PM

Travailler avec la base de données dans CakePHP est très simple. Nous comprendrons les opérations CRUD (Créer, Lire, Mettre à jour, Supprimer) dans ce chapitre.

Date et heure de CakePHP Date et heure de CakePHP Sep 10, 2024 pm 05:27 PM

Pour travailler avec la date et l'heure dans cakephp4, nous allons utiliser la classe FrozenTime disponible.

Téléchargement de fichiers CakePHP Téléchargement de fichiers CakePHP Sep 10, 2024 pm 05:27 PM

Pour travailler sur le téléchargement de fichiers, nous allons utiliser l'assistant de formulaire. Voici un exemple de téléchargement de fichiers.

Discuter de CakePHP Discuter de CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP est un framework open source pour PHP. Il vise à faciliter grandement le développement, le déploiement et la maintenance d'applications. CakePHP est basé sur une architecture de type MVC à la fois puissante et facile à appréhender. Modèles, vues et contrôleurs gu

CakePHP créant des validateurs CakePHP créant des validateurs Sep 10, 2024 pm 05:26 PM

Le validateur peut être créé en ajoutant les deux lignes suivantes dans le contrôleur.

Journalisation CakePHP Journalisation CakePHP Sep 10, 2024 pm 05:26 PM

Se connecter à CakePHP est une tâche très simple. Il vous suffit d'utiliser une seule fonction. Vous pouvez enregistrer les erreurs, les exceptions, les activités des utilisateurs, les actions entreprises par les utilisateurs, pour tout processus en arrière-plan comme cronjob. La journalisation des données dans CakePHP est facile. La fonction log() est fournie

Comment configurer Visual Studio Code (VS Code) pour le développement PHP Comment configurer Visual Studio Code (VS Code) pour le développement PHP Dec 20, 2024 am 11:31 AM

Visual Studio Code, également connu sous le nom de VS Code, est un éditeur de code source gratuit – ou environnement de développement intégré (IDE) – disponible pour tous les principaux systèmes d'exploitation. Avec une large collection d'extensions pour de nombreux langages de programmation, VS Code peut être c

See all articles