Maison  >  Article  >  développement back-end  >  Résumer les bases des objets PHP

Résumer les bases des objets PHP

WBOY
WBOYavant
2022-03-09 18:11:595451parcourir

Cet article vous apporte des connaissances pertinentes sur PHP, qui présente principalement les problèmes liés à l'orientation objet. L'essence de la programmation orientée objet est d'augmenter les sujets opérationnels des données et des fonctions, c'est-à-dire les objets. à tout le monde.

Résumer les bases des objets PHP

Apprentissage recommandé : "Tutoriel PHP"

Apprentissage pratique de php, thinkphp, Redis, vue, uni-app et d'autres technologies, recommande le système de commerce électronique open source likeshop, vous pouvez apprendre des idées, vous pouvez accéder au droit d'auteur pour une utilisation commerciale gratuite, gitee Adresse de téléchargement :
Cliquez pour entrer l'adresse du projet

Orienté objet : programmation POO (programmation orientée objet)

L'orientation processus est une idée de programmation

L'essence de l'objet- la programmation orientée consiste à augmenter le corps opérationnel des données et des fonctions, c'est-à-dire orienté objet

Toutes les données et fonctions de l'objet sont principalement appelées et exploitées par le sujet (objet)

Bases orientées objet

La différence entre orienté processus et orienté objet

Résumer les bases des objets PHP

Mots-clés orientés objet

  • Classe : classe, orienté définition La structure la plus externe du corps de l'objet, utilisée pour envelopper les données et les fonctions (fonctions) du corps
  • Object : objet, un représentant spécifique d'un certain type de transaction, également appelé instance
  • Instantiation : nouveau, le processus d'une classe générant un objet
  • Membre de classe : membre
    • Méthode : méthode, qui est essentiellement une fonction créée dans la structure de classe, appelée méthode membre ou fonction membre
    • Attribut : propriété, qui est essentiellement une variable créée dans la structure de classe, appelée variable membre
    • Constante de classe : const, essentiellement une constante créée dans la structure de classe

Créer un objet

<?phpclass  People{}$man=new People();# 实例化类,man就是对象var_dump($man);?>
    # 输出object(People)#1 (0) { }
    #1表示:对象编号,与类无关,是整个脚本中对象的序号(0)表示:成员变量(属性)个数{}表示:具体成员变量信息(键值对)

Objet de classe

<?phpclass  Buyer{
    # 常量声明
    const BIG_NAME=&#39;BUYER&#39;;
    # 常量不需要加 $

    # 属性声明
    # $name;
    # 错误的,类内部属性必须使用访问修饰限定符
    public $name;
    public $money=0;
    
    # 方法声明
    function display(){
        echo __CLASS__;
        # 魔术常量,输出类名
        # 方法内部变量属于局部变量
    }}# 实例化$a = new Buyer();# 属性操作,增删改查echo $a->money;$a->money='20';$a->sex='male';unset($a->name);echo '<br>';# 方法操作$a->display();echo '<br>';var_dump($a);?>
    # 输出0Buyerobject(Buyer)#1 (2) { ["money"]=> string(2) "20" ["sex"]=> string(4) "male" }

Remarque : les objets ne peuvent pas accéder aux constantes de classe

Qualificateur de modification d'accès

Le mot-clé modifié avant qu'un attribut ou une méthode soit utilisé pour contrôler l'emplacement d'accès de l'attribut ou de la méthode

  • public : public, accessible à l'intérieur et à l'extérieur de la classe
  • protected : protégé, accessible uniquement au sein de la classe concernée
  • private : privé, accessible uniquement au sein de la classe de définition

L'attribut doit avoir un accès qualificatif de modificateur, la méthode ne peut avoir aucun qualificatif de modificateur d'accès, la valeur par défaut est public

Objet interne de la classe

$this, un objet intégré à la méthode, pointera automatiquement vers l'objet de la méthode appelée

$this existe à l'intérieur de la méthode (usage interne uniquement), cela équivaut donc à être dans la structure de la classe

  • Vous pouvez accéder à n'importe quel membre modifié par le qualificatif de modification d'accès
  • Membres privés L'accès se fait via des méthodes publiques (les méthodes publiques peuvent être accessible en dehors de la classe)
<?phpclass  Article{
    protected $name = &#39;a&#39;;
    private $type = &#39;art&#39;;

    public function get_name()
    {
        var_dump($this);
    }}$a = new Article();var_dump($a);?>
    # 输出object(Article)#1 (2) { ["name:protected"]=> string(1) "a" ["type:private"]=> string(3) "art" }

$this représente l'objet, et l'environnement où $this se trouve est à l'intérieur de la méthode à l'intérieur de la classe, donc l'objet $this est accessible à l'intérieur de la classe. Par conséquent, toutes les propriétés et méthodes sont accessibles en dehors de la classe. non limité par les qualificatifs de modification d'accès

Résumer les bases des objets PHP

Résumer les bases des objets PHP

Résumer les bases des objets PHP

Méthode de construction

  • __construct() est une méthode magique intégrée au système dont les caractéristiques sont dans l'objet Après instanciation, l'objet appelle automatiquement

  • Le but du constructeur est d'initialiser les ressources, y compris les propriétés de l'objet et d'autres ressources

  • Une fois le constructeur défini et le constructeur a ses propres paramètres, il ne peut être utilisé qu'une nouvelle méthode de nom de classe (liste de paramètres) peut être correctement instancié

  • La méthode magique peut également être appelée en appelant directement l'objet, mais elle n'a aucune utilité pratique

<?phpclass  Article{
    public $name=&#39;xiaoli&#39;;
    private $sex="male";

    public function __construct($name,$sex)
    {
        $this->name = $name;
        $this->sex = $sex;
    }}$a = new Article('xiaowang', 'famale');var_dump($a);?>

Méthode destructeur

  • __destruct(), l'objet est automatiquement appelé lorsqu'il est détruit pour libérer des ressources
  • Destruction d'objet
    1. L'objet n'a pas de pointeur de variable (la variable pointe vers d'autres données)
    2. L'objet est activement détruit (unset détruit la variable objet)
    3. L'exécution du script se termine (libération automatique des ressources)
  • PHP Toutes les ressources seront libérées lors de l'exécution du script, donc la méthode destructeur est généralement moins utilisée
<?phpclass  Article{
    protected $name = &#39;xiaoli&#39;;
    private $sex = &#39;famale&#39;;

    public function __destruct()
    {
        // TODO: Implement __destruct() method.
        echo __FUNCTION__;
    }}$a=new Article();# 销毁对象$a=1;unset($a);# __destructendecho &#39;end&#39;;?>
    # 不销毁对象,php在运行结束也会释放资源# end__destruct

Passage d'objet par valeur

Définition : Assignation de la variable contenant l'objet à une autre variable

En PHP, le passage de l'objet est par référence : C'est-à-dire qu'une variable d'objet est affectée à une autre variable et que les deux variables pointent vers la même adresse d'objet, c'est-à-dire qu'il n'y a qu'un seul objet

<?phpclass  Article{
    public $name = &#39;xiaoli&#39;;
    public $sex = &#39;famale&#39;;}$a=new Article();$b=$a;var_dump($a,$b);echo &#39;<br>';$a->name="wangxiaohu";var_dump($a,$b);echo '<br>';?>
    # 输出object(Article)#1 (2) { ["name"]=> string(6) "xiaoli" ["sex"]=> string(6) "famale" } object(Article)
    #1 (2) { ["name"]=> string(6) "xiaoli" ["sex"]=> string(6) "famale" }object(Article)
    #1 (2) { ["name"]=> string(10) "wangxiaohu" ["sex"]=> string(6) "famale" } object(Article)
    #1 (2) { ["name"]=> string(10) "wangxiaohu" ["sex"]=> string(6) "famale" }

Opérateur de résolution de plage (accès constant de classe)

Il y a deux deux-points formant "::", spécialement utilisés pour les classes permettant d'implémenter des opérations sur les membres de classe, les classes peuvent être implémentées pour accéder directement aux membres de la classe

  • L'opérateur de résolution de plage est utilisé pour accéder aux membres de la classe (nom de la classe)

    类名::类成员
  • L'opérateur de résolution de plage peut également être utilisé. Les objets sont utilisés comme classes (non recommandé)

    $对象名::类成员
  • Les constantes de classe ne sont accessibles que par les classes

<?phpclass  Article{
    const  NAME=&#39;ocean&#39;;}echo Article::NAME;
    # 常量是不能通过 Article->NAME 来进行访问的$a=new Article();echo $a::NAME;
    # 范围解析操作符兼容对象,找到对象所属类最终进行访问,效率降低,灵活性提高?>

Les constantes de classe sont fixes, tandis que les propriétés des objets sont différents pour différents objets

Résumer les bases des objets PHP

静态成员

定义:使用 static 关键字修饰的类成员,表示该成员属于类访问

  • 静态成员
    • 静态属性
    • 静态方法
  • 静态成员是明确用来给类访问的,而不是对象
  • 静态成员只是多了一个 static 关键字修饰,本身也可以被对象访问
  • 静态成员同样可以使用不同的访问修饰限定符限定,效果一致

Résumer les bases des objets PHP

<?phpclass  Article{
    public static $name = &#39;hlm&#39;;
    public static $type = &#39;art&#39;;

    public static function getName()
    {
        return self::$name;
    }}# 静态属性$a = new Article();echo Article::$name;# 静态方法echo Article::getName();?>

self关键字

  • 在类的内部(方法里面)使用,代替类名的写法
  • self 如同 $this 代表内部对象一样,能够在方法内部代替当前类名
  • 能够保障用户方便修改类名字
  • self 关键字是代替类名,所以需要配合范围解析操作符 ::
<?phpclass  Article{
    public static function getInstance1()
    {
        return new self();
    }

    public static function getInstance2()
    {
        return new Article();
    }}$a = Article::getInstance1();$b = Article::getInstance2();var_dump($a,$b);?>
    # 输出object(Article)
    #1 (0) { } object(Article)
    #2 (0) { }

类加载

类的访问必须保证类在内存中已经存在,所以需要再用类之前将类所在的 PHP 文件加载到内存中

  • 类的加载分为两种

    • 手动加载:在需要使用类之间通过 include 将包含类的文件引入到内存
    • 自动加载:提前定义好类结构和位置,写好引入类文件代码,在系统需要类而内存不存在的时候想办法让写好的加载类的代码执行(自动加载是自动运行写好的加载类的代码)
  • 自动加载两种方式

    • 魔术函数 __autoload:系统自动调用,需要传入类名,在函数内部实现类的手动加载(PHP7及之后不建议使用此方法)
    function __autoload($classname){
        # 找到对应的文件路径和命名规范,手动加载}
     
    • 自定义函数:自己定义类的加载实现,然后通过 spl_autoload_register 注册到自动加载机制(可注册多个自动加载)
    # 自定义类加载函数function 自定义函数($classname){
        # 找到对应的文件和命名规范,手动加载}#注册自动加载sql_autoload_register('自定义函数名字')

自动加载要求在声明类的时候有良好的规范

  • 类名与文件名一致:类名.php 或者 类名.class.php
  • 类文件分类放好

Résumer les bases des objets PHP

例:手动加载

Résumer les bases des objets PHP

Article.php

<?phpclass  Article{
    public function getName(){
        return __METHOD__;
    }}

mian.php

<?php # include &#39;Article.php&#39;;# 直接加载比较消耗资源,而且如果类已经在内存中存在,直接include会报错,建议判断后再加载if(!class_exists(&#39;Article&#39;)){
    include &#39;Article.php&#39;;}$a=new Article();var_dump($a->getName());
    # outputstring(16) "Article::getName"

自动加载

  • __autoload(不建议使用)

一个系统中,可能类文件会放到不同的路径下,因此一个完整的自动加载函数,应该要进行文件判定功能

<?php function __autoload($classname){
    # 形参代指 类名
    #组织文件路径,假设当前路径下,有两个文件夹下都有类c和类m
    $c_file = &#39;c/&#39; . $classname . &#39;.php&#39;;
    if (file_exists($c_file)) {
        include_once($c_file);
        return true;
    } 
    //if 语句如果只有一行不需要加 {}
    //include_once 只加载一次

    $m_file = &#39;m/&#39; . $classname . &#39;.php&#39;;
    if (file_exists($m_file)) {
        include_once($m_file);
        return true;
    }
}


$a=new Article();
$b=new Article();
  • spl_autoload_register
<?phpfunction  autoload01($classname){
    if(!class_exists($classname)){
        $file_name=$classname.&#39;.php&#39;;
        if(file_exists($file_name)) include_once $file_name;
    }}spl_autoload_register(&#39;autoload01&#39;);$a=new Article();

对象克隆

通过已有的对象复制一个新的同样的对象,但两者之间并非同一个对象

Résumer les bases des objets PHP

Résumer les bases des objets PHP

面向对象高级

面向对象三大特性

封装、继承、多态

类的封装

Résumer les bases des objets PHP

类的继承

inherit,子类合法拥有父类的某些权限

  • 继承必须满足继承关系:即存在合理的包含关系
  • 继承的本质是子类通过继承可以直接使用父类已经存在的数据和数据操作
  • PHP 使用 extends 关键字表示继承

子类也称派生类

父类也称基类

# 父类class Human{}# 子类继承class Man extends Human{}

类的多态

多态性是指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果

  • 需要发生类的继承,同时出现方法的重写(override),即子类拥有与父类同名的方法
  • 在实例化对象的时候让父类对象指向子类对象(强制类型,PHP不支持,PHP 弱类型很灵活)
  • 结果:父类对象表现的子类对象的特点

Résumer les bases des objets PHP

—PHP继承—

<?phpclass  Human{
    public function show(){
        echo __METHOD__;
    }}class Man extends Human{}$m=new Man;$m->show();

有限继承

子类在继承父类的成员时,并非继承所有内容,而是继承并使用父类部分内容

  • L'essence de l'héritage en PHP est l'héritage d'objet
  • Contenu hérité en PHP : tous les membres publics, les membres protégés et les propriétés privées de la classe parent, les méthodes privées ne peuvent pas être héritées
  • Les membres protégés sont dédiés à l'héritage et peuvent être utilisés dans la classe parent Accès interne aux classes ou sous-classes
  • Les membres privés ne sont accessibles qu'en définissant des méthodes publiques ou protégées dans la classe à laquelle ils appartiennent
  • Les méthodes constructeur et destructeur peuvent être héritées par les sous-classes,

override Override

override , Un membre portant le même nom que la classe parent est défini dans la sous-classe

Résumer les bases des objets PHP

mot-clé parent

Une expression pour accéder explicitement aux membres de la classe parent

Résumer les bases des objets PHP

Une fois la méthode réécrite, l'appel d'accès est la méthode de sous-classe, si vous souhaitez accéder à la méthode de classe parent, vous pouvez forcer l'accès à la méthode de classe parent en utilisant parent dans la méthode de classe enfant

parent ne peut pas être utilisé pour accéder aux propriétés de la classe parent (les propriétés statiques peuvent )

Fonctionnalités d'héritage PHP

  • PHP uniquement L'héritage unique est possible, il n'y a qu'une seule classe parent (si vous héritez de plusieurs classes, vous pouvez utiliser l'héritage en chaîne)
  • Dans l'héritage PHP, seules les méthodes privées ne peuvent pas être héritées
  • PHP permet l'héritage des constructeurs et des destructeurs dans les classes parents

Liaison statique retardée

Résumer les bases des objets PHP

Résumer les bases des objets PHP

Final class Final

Utilisez le mot-clé final pour modifier le nom de la classe, indiquant que cette classe ne peut pas être héritée

Le mot-clé final peut également modifier la méthode, indiquant que la méthode ne peut pas être remplacée (généralement À ce moment, la classe n'utilisera pas le mot-clé final)

Résumer les bases des objets PHP

Classe abstraite Abstract

Une classe modifiée avec le mot-clé abstract, indiquant que la classe ne peut être hérité et ne peut pas être instancié

Le mot-clé abstrait peut modifier les méthodes, indiquant que la méthode est une méthode abstraite et que la méthode abstraite n'a pas de corps de méthode (non {})

La classe dans laquelle la méthode abstraite existe doit être une classe abstraite

La classe qui hérite de la classe abstraite doit soit être une classe abstraite, soit implémenter toutes les méthodes abstraites de la classe abstraite

trait La réutilisation du code

Résumer les bases des objets PHP

est applicable lorsqu'il existe du code commun entre différentes classes, mais il n'y a pas de relation d'héritage entre les classes. Dans ce cas, le code commun peut être stocké dans le trait. Le trait peut avoir des membres qui peuvent appartenir à une classe (y compris statiques), des méthodes membres (y compris statiques et abstraites). méthodes), mais aucune constante de classe

trait n'est utilisé pour la réutilisation du code, ne peut pas être instancié, ne peut pas être hérité

trait avec le même nom

peut devoir être introduit dans une classe Plusieurs traits, et le même nom peut apparaître dans différents traits

Résumer les bases des objets PHPInterface

Interface, qui est spécialement utilisée pour standardiser les méthodes que certaines classes courantes doivent implémenter

Les interfaces ne sont pas des classes, mais ont des structures similaires aux classes
  • Les interfaces ne peuvent pas instancier, une classe peut implémenter l'interface
  • nom de l'interface de l'interface{}

le nom de la classe implémente le nom de l'interface{}

Résumer les bases des objets PHP

Membres de l'interface

Les membres de l'interface ne peuvent avoir que deux types

Constante d'interface : const
  • Méthodes d'interface communes (méthodes normales et méthodes statiques)

Résumer les bases des objets PHPSurcharge PHP

la surcharge signifie que plusieurs méthodes portant le même nom peuvent apparaître dans une classe, et que le nombre et le type de paramètres sont différents les uns des autres

Résumer les bases des objets PHP Utilisé pour la tolérance aux pannes

Surcharge d'attributs

Lorsque l'objet accède à des propriétés qui n'existent pas ou qui ont des autorisations insuffisantes, la méthode magique est automatiquement déclenchée afin que le code ne se trompe pas

Méthode magique de surcharge d'attributs

__get( Nom de l'attribut) : Déclenché lors de l'accès à un attribut qui n'existe pas ou dont les autorisations sont insuffisantes
  • __set(nom de l'attribut, valeur de l'attribut) : Déclenché lors de la définition d'un attribut qui n'existe pas ou dont les autorisations sont insuffisantes
  • __isset(nom de l'attribut) : Détermine qu'il n'existe pas ou a des autorisations insuffisantes L'attribut est déclenché
  • __unset (nom de l'attribut) : déclenché lors de la suppression d'un attribut qui n'existe pas ou qui a des autorisations insuffisantes
  • __tostring() : traité comme une chaîne
surcharge de méthode

L'accès aux objets ou aux classes n'existe pas ou a des autorisations insuffisantes, la méthode magique qui se déclenche automatiquement pour rendre le code sans erreur

  • __cal(方法名,方法参数列表):调用不存在或者权限不够的方法时触发
  • __callStatic(方法名,方法参数列表):调用不存在或者权限不够的静态方法时触发

对象遍历

将对象中的所有属性以键值对的形式取出并进行访问

  • 对象是一种复合数据类型,对象中真正保存的内容是属性

  • 对象的属性本质也是一种键值对关系:名字 = 值

  • 对象遍历就是利用 foreach 对对象中的属性进行取出解析

  • 对象遍历遵循访问修饰限定符的限定:即类外只能遍历所有共有属性

    foreach(对象变量 as [属性名变量 =>] 属性值变量){
        #属性名变量代表取出的每个属性的名字
        #属性值变量代表取出的每个属性的值}

    Résumer les bases des objets PHP

Iterator 迭代器

Résumer les bases des objets PHP

生成器

Résumer les bases des objets PHP

Résumer les bases des objets PHP

yield 关键字

设计模式

design pattern,是软件开发人员在软件开发过程中问题的解决方法

单例模式

singleton,是一种类的设计只会最多产生一个对象的设计思想Résumer les bases des objets PHP

保证资源唯一性

工厂模式

。。。。。。

命名空间

namespace,指人为的将内存进行分隔,让不同内存区域的同名结构共存,从而解决在大型项目能出现重名结构问题

Résumer les bases des objets PHP

基础语法:

namespace 关键字定义空间

命名规则

字母、数字、下划线,不能以数字开头

命名空间必须写在所有代码之前,定义了一个,之后可以定义多个

Résumer les bases des objets PHP

子空间

subspace,即在已有空间之上,再在内部进行空间划分

子空间直接通过 namespace+路径符号 \ 实现

非限定名称

直接访问元素本身,代表当前所属空间(当前目录)

限定名称

使用空间名+原名,代表访问当前空间子空间(当前目录子目录)

完全限定名称

从根目录(全局空间)开始访问,使用 \ 作为全局空间开始符号(根目录)

全局空间元素访问:使用完全限定名称访问

Résumer les bases des objets PHP

命名空间引入

Résumer les bases des objets PHP

推荐学习:《PHP视频教程

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer