Table des matières

                                                                                                                           Caractéristiques
(1), destructeur
Maison développement back-end tutoriel php Destructeur orienté objet PHP et référence d'objet

Destructeur orienté objet PHP et référence d'objet

May 23, 2020 pm 07:12 PM
référence d'objet 析构函数 面向对象

                                                          Destructeur orienté objet PHP et référence d'objet :


                                                                                                                           Caractéristiques

4. Maîtriser les concepts et caractéristiques de l'affectation de référence d'objet

(1), destructeur

1. Définition

 :C'est une fonction spéciale

 

2. Fonction

 : Nettoyer les objets et libérer de la mémoire

3. Caractéristiques : 1. Exécution automatique au lieu d'un appel manuel

2. Une fois qu'une classe définit un destructeur, tous les objets d'instance sous la classe seront détruits avant la fin du programme

public function destruct(){} 3. Exécuté au dernier moment avant la fin de l'application, sauf s'il y a certaines circonstances particulières, comme le point 4, ou il sera automatiquement exécuté après la fin du cycle de vie de l'objet

4. Une fois que nous détruisons manuellement un objet, le système déclenchera automatiquement le destructeur de l'objet Portez une attention particulière à une situation particulière : si l'objet est cité par d'autres objets, son destructeur ne sera pas déclenché

5. Exécuter avant la fin du cycle de vie de l'objet 6 . Au dernier moment avant la fin de l'application, les objets qui n'auront pas été détruits seront détruits, et les objets qui auront été détruits ne seront plus détruits

                                                                  .                                                                                                                                                                                           Le destructeur d'un objet ne peut être que exécuté une fois et ne sera pas exécuté plusieurs fois PHP créera automatiquement un destructeur pour la classe, puis appellera le destructeur par défaut avant la fin du programme. Cependant, une fois le destructeur défini, le destructeur que nous avons écrit sera exécuté

<.> De plus, nous pouvons écrire son propre code métier dans notre propre destructeur

Si le programme utilise une ressource imprimante, nous pouvons libérer la ressource imprimante avant de détruire l'objet

Le code correspondant est la suivante :

<?php

 class NbaPlayer{
   
    public $name  = "";//姓名
    public $height = "";//身高
    public $weight = "";//体重
    public $team = "";//团队
    public $playerName = "";//球员号码

    
    public function __construct( $name,$height,$weight,$team,$playerName ){
        $this->name = $name;
        $this->height=$height;
        $this->weight = $weight;
        $this->team = $team;
        $this->playName = $playerName;
        echo "构造函数执行了,当前对象是{$this->name}<br/>";
    }
    //析构函数
    public function __destruct(){
        echo "销毁对象".$this->name."<br/>";
    }
   
   //跑步
    public function run(){
        echo "跑步中<br/>";
    }
    //跳跃
    public function jump(){
        echo "跳跃<br/>";
    }
    //运球
    public function dribble(){
        echo "运球<br/>";
    } 
    //传球
    public function pass(){
        echo "传球<br/>";
    }
    //投篮
    public function shoot(){
        echo "投篮<br/>";
    }
    //扣篮
    public function dunk(){
        echo "扣篮<br/>";
    }

 }
 //创建乔丹对象
$jordon = new NbaPlayer("乔丹","1.98米","98公斤","公牛","23");
//输出乔丹对象
echo "名称= ".$jordon->name."<br/>";
//让乔丹跑步
$jordon->run();

//创建科比对象
$kobe = new NbaPlayer("科比","2米","93公斤","湖人","24");
//创建詹姆斯对象
$james = new NbaPlayer("詹姆斯","2.03米","120公斤","热火","6");
$james1 = new NbaPlayer("詹姆斯1","2.03米","120公斤","热火","6");
$james2 = new NbaPlayer("詹姆斯2","2.03米","120公斤","热火","6");

$jordon = null;//手动的销毁了对象 ,此时乔丹对象的析构函数将会被触发

$kobe = null;//手动的销毁了对象 ,此时科比对象的析构函数将会被触发


echo "<b>程序结束完毕</b><br/>";
?>
Copier après la connexion

Ensuite, je modifie le code comme suit, j'ajoute une classe de connexion à la base de données Mysql, puis je l'appelle dans le constructeur NbaPlayer

Il s'agit de Mysql.class. php, qui définit un destructeur

<?php
//数据库类
class Mysql{
    //定义属性
    public $conn = "";
    //构造函数
    public function __construct( ){
        //初始化行为 初始化方法
        $this->initConn();
    }
    //析构函数 销毁数据库连接
    public function __destruct(){
        //销毁连接
        if( $this->conn ){
            mysqli_close( $this->conn );
            echo "销毁了连接<br/>";
        }
    }
    
    //定义方法
    //创建公共的方法 获取数据库连接
    public function initConn(){
        $config = Array(
            "hostname"=>"127.0.0.1",
            "database"=>"Nbaplayer",
            "username"=>"root",
            "password"=>"root"
        );
        $this->conn = mysqli_connect( $config[&#39;hostname&#39;],$config[&#39;username&#39;] ,$config[&#39;password&#39;],
                $config[&#39;database&#39;]);
    }
}
?>
Copier après la connexion

Ensuite, nous définirons la classe NbaPlayer, mais afin de mettre en évidence les points clés, j'abrégerai la classe NbaPlayer comme suit :

<?php
 require_once "Mysql.class.php";
 class NbaPlayer{
   
    public $name  = "";//姓名
    public $height = "";//身高
    public $weight = "";//体重
    public $team = "";//团队
    public $playerName = "";//球员号码
    public $conn = "";//添加一个数据库连接属性

    
    public function __construct( $name,$height,$weight,$team,$playerName ){
        $this->name = $name;
        $this->height=$height;
        $this->weight = $weight;
        $this->team = $team;
        $this->playName = $playerName;
        //初始化数据库连接属性
        $mysql = new Mysql();
        $this->conn = $mysql->conn;
        
    }
    //新增获取所有Nba球员的方法
     public function getAll(){
         //创建数据库连接
        $conn = $this->conn;
        //写sql
        $sql = " select * from ".$this->tableName;
        //执行sql
        $result = mysqli_query( $conn,$sql );
        //获取数据
        // mysqli_fetch_all($result)//特点:不会包含字段名
        $list = Array();
        while( $row = mysqli_fetch_assoc(  $result ) ){
            $list[] = $row;
        }
        //返回数据
        return $list;
     }

 }
 //创建乔丹对象
$jordon = new NbaPlayer("乔丹","1.98米","98公斤","公牛","23");

$list = $jordon->getAll();

echo "<b>程序结束完毕</b><br/>";
?>
Copier après la connexion

Lorsque vous exécuterez, vous trouverez l'erreur et vous constaterez que la connexion a été détruite, avant que la fonction getAll ne soit appelée, c'est-à-dire une fois instanciée $jordon = new NbaPlayer("jordan","1.98 m","98 Kilogram","Bull","23");

L'objet de connexion à la base de données est détruit. En fait, si vous déboguez, vous constaterez que l'objet mysql dans le constructeur est en fait dans la classe NbaPlayer. Une fois le dernier } du constructeur exécuté, il sera détruit. Pourquoi ?

Cela implique en fait le problème de la portée de la variable, car l'objet mysql est défini dans le constructeur, donc il est défini dans le constructeur. n'est pas accessible de l'extérieur pour y accéder, donc une fois le constructeur exécuté, le système pensera qu'il n'est plus utile, il va donc

le nettoyer et exécuter son destructeur, donc à la fin. vous appelez getAll Lorsque vous utilisez cette méthode, la connexion à la base de données est déconnectée depuis longtemps et naturellement le SQL ne peut plus être exécuté

En fait, si vous souhaitez résoudre ce problème, vous devez comprendre la référence de l'objet. . Nous pouvons résoudre ce problème en combinant les références d'objet. Suivant Comprenons d'abord la référence d'objet

(2), la référence d'objet

Résumé :

1、变量1=变量2=对象 会创建对象的2个独立引用,但是他们指向的还是同一个对象,所以还是会互相影响

2、变量1=&变量2 只会创建对象的一个引用,因为它们使用同一个对象引用

3、一个对象有没有用,就要看它是否完全没有被引用了,如果没有任何变量引用它,它就真的没用了,

才会被销毁,进而它的析构函数才会得以执行

4、变量1=clone 变量2=对象,不会创建对象的新引用,而是仿造了一个新的该对象,具有该对象通用的属性和方法

相关代码如下:

<?php

 class NbaPlayer{
   
    public $name  = "";//姓名
    public $height = "";//身高
    public $weight = "";//体重
    public $team = "";//团队
    public $playerName = "";//球员号码

    
    public function __construct( $name,$height,$weight,$team,$playerName ){
        $this->name = $name;
        $this->height=$height;
        $this->weight = $weight;
        $this->team = $team;
        $this->playName = $playerName;
        echo "构造函数执行了,当前对象是{$this->name}<br/>";
    }
    public function __destruct(){
        echo "销毁对象".$this->name."<br/>";
    }
   
   //跑步
    public function run(){
        echo "跑步中<br/>";
    }
    //跳跃
    public function jump(){
        echo "跳跃<br/>";
    }
    //运球
    public function dribble(){
        echo "运球<br/>";
    } 
    //传球
    public function pass(){
        echo "传球<br/>";
    }
    //投篮
    public function shoot(){
        echo "投篮<br/>";
    }
    //扣篮
    public function dunk(){
        echo "扣篮<br/>";
    }

 }
 //创建乔丹对象
$jordon = new NbaPlayer("乔丹","1.98米","98公斤","公牛","23");
//输出乔丹对象
echo "名称= ".$jordon->name."<br/>";
//让乔丹跑步
$jordon->run();

//创建科比对象
$kobe = new NbaPlayer("科比","2米","93公斤","湖人","24");
//创建詹姆斯对象
$james = new NbaPlayer("詹姆斯","2.03米","120公斤","热火","6");
$james1 = new NbaPlayer("詹姆斯1","2.03米","120公斤","热火","6");
$james2 = new NbaPlayer("詹姆斯2","2.03米","120公斤","热火","6");

 $jordon1 = $jordon;//&符号表示左边对象和右边对象其实就是一个对象
 $jordon = null;//手动的销毁了对象 


echo "<b>程序结束完毕</b><br/>";
?>
Copier après la connexion

重点解析:本来不加$jordon1 = $jordon;当程序执行到$jordon=null,乔丹对象的析构函数将会被执行,也就是说 “销毁对象乔丹”在“程序结束完毕” 前显示
但是加了这句以后,你会发现执行到$jordon=null的时候,乔丹对象的析构函数并没有马上执行,而是到应用程序结束后才被系统自动执行 ,也就是说

“销毁对象乔丹”在“程序结束完毕” 后显示

为什么会这样:

接下来就来具体分析$jordon1 = $jordon 这行代码到底让系统做了什么事情

Destructeur orienté objet PHP et référence dobjet

结合上面的代码,其实我们写的代码顺序是

$jordon = new NbaPlayer("乔丹","1.98米","98公斤","公牛","23");

$jordon1 = $jordon;

那么$jordon = new NbaPlayer("乔丹","1.98米","98公斤","公牛","23");

说明就是

1、创建了乔丹对象

2、创建了一个变量,变量名叫jordon

3、创了一个乔丹对象的独立引用,就是上图的箭头

然后$jordon1 = $jordon;

说明就是

1、创建了一个新的变量,名叫jordon1

2、又创建了一个乔丹对象的独立引用,就是上图的第二个箭头

那么说明 乔丹对象此时被两个变量引用,当我们$jordon=null 的时候,乔丹对象还被jordon1变量引用,所以此时乔丹对象还有用,还有用就不能当做垃圾清理掉,

所以这就可以解释上面的问题,乔丹对象 在最后 才会被系统销毁,所以要看一个对象是否有用,要看它到底还存不存在变量引用,如果完全不存在变量引用了,那么这个

对象才可以被视作完全无用,它的析构函数才会被执行

好这是对象引用赋值的一种形式,还有另外一种 就是 =&

代码如下:

<?php

 class NbaPlayer{
   
    public $name  = "";//姓名
    public $height = "";//身高
    public $weight = "";//体重
    public $team = "";//团队
    public $playerName = "";//球员号码

    
    public function __construct( $name,$height,$weight,$team,$playerName ){
        $this->name = $name;
        $this->height=$height;
        $this->weight = $weight;
        $this->team = $team;
        $this->playName = $playerName;
        echo "构造函数执行了,当前对象是{$this->name}<br/>";
    }
    public function __destruct(){
        echo "销毁对象".$this->name."<br/>";
    }
   
   //跑步
    public function run(){
        echo "跑步中<br/>";
    }
    //跳跃
    public function jump(){
        echo "跳跃<br/>";
    }
    //运球
    public function dribble(){
        echo "运球<br/>";
    } 
    //传球
    public function pass(){
        echo "传球<br/>";
    }
    //投篮
    public function shoot(){
        echo "投篮<br/>";
    }
    //扣篮
    public function dunk(){
        echo "扣篮<br/>";
    }

 }
 //创建乔丹对象
$jordon = new NbaPlayer("乔丹","1.98米","98公斤","公牛","23");
//输出乔丹对象
echo "名称= ".$jordon->name."<br/>";
//让乔丹跑步
$jordon->run();

//创建科比对象
$kobe = new NbaPlayer("科比","2米","93公斤","湖人","24");
//创建詹姆斯对象
$james = new NbaPlayer("詹姆斯","2.03米","120公斤","热火","6");
$james1 = new NbaPlayer("詹姆斯1","2.03米","120公斤","热火","6");
$james2 = new NbaPlayer("詹姆斯2","2.03米","120公斤","热火","6");

 $jordon1 = &$jordon;//&符号表示左边对象和右边对象其实就是一个对象
 $jordon = null;//手动的销毁了对象 


echo "<b>程序结束完毕</b><br/>";
?>
Copier après la connexion

当我们把上面的代码仅仅加上一个 &,也就是把$jordon1 = $jordon 改成 $jordon1 =& $jordon,你会发现结果又变了

变成什么呢,就是当执行$jordon=null的时候,乔丹对象的析构函数还是被执行了,为什么呢

我们再来看下 $jordon1 = & $jordon 做了什么事情

Destructeur orienté objet PHP et référence dobjet

系统所做事情如下:

1、创建变量,jordon1

2、然后不会再次创建乔丹对象引用,$jordon1通过$jordon变量来使用同一个对象引用来访问乔丹对象

所以此时乔丹对象,只有一个对象引用,不是2个,所以当我们$jordon=null的时候,其实就是销毁了那唯一的对象引用,进而导致乔丹对象完全没有了对象引用,所以他的析构函数此时会被触发执行

不管是$jordon1=$jordon 还是 $jordon1=&jordon ,修改任意变量里面的名称,都会导致另外变量的名称被修改掉,因为他们都是引用的同一个乔丹对象

其实对象赋值,除了上面2种方式外,还有第三种,就是 clone(浅复制) ,也就是比如$jordon1 = clone $jordon;

那这样的赋值方式它究竟又是什么意思呢,其实相当于 仿造了 一个乔丹对象

接下来我们通过代码演示

<?php

 class NbaPlayer{
   
    public $name  = "";//姓名
    public $height = "";//身高
    public $weight = "";//体重
    public $team = "";//团队
    public $playerName = "";//球员号码

    
    public function __construct( $name,$height,$weight,$team,$playerName ){
        $this->name = $name;
        $this->height=$height;
        $this->weight = $weight;
        $this->team = $team;
        $this->playName = $playerName;
        // echo "构造函数执行了,当前对象是{$this->name}<br/>";
    }
    public function __destruct(){
        echo "销毁了对象".$this->name."<br/>";
    }
   
   //跑步
    public function run(){
        echo "跑步中<br/>";
    }
    //跳跃
    public function jump(){
        echo "跳跃<br/>";
    }
    //运球
    public function dribble(){
        echo "运球<br/>";
    } 
    //传球
    public function pass(){
        echo "传球<br/>";
    }
    //投篮
    public function shoot(){
        echo "投篮<br/>";
    }
    //扣篮
    public function dunk(){
        echo "扣篮<br/>";
    }

 }
 //创建乔丹对象
$jordon = new NbaPlayer("乔丹","1.98米","98公斤","公牛","23");

$jordon1 = clone $jordon;
$jordon1 = null;
$jordon = null;

echo "应用程序结束<br/>";


?>
Copier après la connexion

执行结果如下:

Destructeur orienté objet PHP et référence dobjet

所以$jordon1=clone $jordon;其实就是 仿造了一个乔丹对象,拥有和乔丹对象一样的属性和方法

到目前为止,我们了解了对象引用,那么结合对象引用,我们如何解决最开始的那个问题呢?

大家思考一下再看下面的解决方案

....................................

好,接下来我们来看上面我们遇到的问题

问题是:mysql对象在构造函数执行完毕后,就被销毁了,导致后面getAll函数里的数据库连接无法使用

解决思路:

1.mysql对象在构造函数执行完成后,就被销毁了,说明mysql对象此时没有了对象引用

2.那我们就要让他在构造函数执行完成后,依然存在对象引用,那么mysql对象就还有用,还有用就不会被销毁

3.在构造函数里,创建mysql对象的引用,让它在构造函数执行完成后,这个引用依然存在

4.我们可以定义个类的新属性比如$mysql,然后让$this->mysql = $mysql;这样就创建了一个mysql对象的独立引用,而且当构造函数执行完成后

类的mysql属性还有用,所以这个对象引用还有用,进而mysql对象还有用,就不会被销毁

具体代码如下:

<?php
 require_once "Mysql.class.php";
 class NbaPlayer{
   
    public $name  = "";//姓名
    public $height = "";//身高
    public $weight = "";//体重
    public $team = "";//团队
    public $playerName = "";//球员号码
    public $conn = "";//添加一个数据库连接属性
    public $mysql = "";//新增一个mysql属性

    
    public function __construct( $name,$height,$weight,$team,$playerName ){
        $this->name = $name;
        $this->height=$height;
        $this->weight = $weight;
        $this->team = $team;
        $this->playName = $playerName;
        //初始化数据库连接属性
        $mysql = new Mysql();
        $this->conn = $mysql->conn;
        //解决问题的重点代码
        $this->mysql = $mysql;//加了这行代码,getAll中的conn 数据库连接就不会销毁
        
    }
    //新增获取所有Nba球员的方法
     public function getAll(){
         //创建数据库连接
        $conn = $this->conn;
        //写sql
        $sql = " select * from ".$this->tableName;
        //执行sql
        $result = mysqli_query( $conn,$sql );
        //获取数据
        // mysqli_fetch_all($result)//特点:不会包含字段名
        $list = Array();
        while( $row = mysqli_fetch_assoc(  $result ) ){
            $list[] = $row;
        }
        //返回数据
        return $list;
     }

 }
 //创建乔丹对象
$jordon = new NbaPlayer("乔丹","1.98米","98公斤","公牛","23");

$list = $jordon->getAll();

echo "<b>程序结束完毕</b><br/>";
?>
Copier après la connexion

好了,最后我们再稍微做下总结:

1、了解了析构函数的定义,它其实就是一个特殊函数

2、了解了析构函数的作用,就是8个字,清理对象,释放内存

3、了解了析构函数的特点,特点有点多,主要7点

4、知道了对象引用的3种赋值方式,一个是=一个是=&,还有一个是clone

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 尊渡假赌尊渡假赌尊渡假赌
Où trouver la courte de la grue à atomide atomique
1 Il y a quelques semaines By DDD

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)

Comment implémenter une programmation événementielle orientée objet à l'aide du langage Go Comment implémenter une programmation événementielle orientée objet à l'aide du langage Go Jul 20, 2023 pm 10:36 PM

Comment utiliser le langage Go pour implémenter une programmation événementielle orientée objet Introduction : Le paradigme de programmation orientée objet est largement utilisé dans le développement de logiciels, et la programmation événementielle est un modèle de programmation courant qui réalise le flux du programme à travers le déclenchement et le traitement de contrôle des événements. Cet article présentera comment implémenter une programmation événementielle orientée objet à l'aide du langage Go et fournira des exemples de code. 1. Le concept de programmation événementielle La programmation événementielle est un modèle de programmation basé sur des événements et des messages, qui transfère le contrôle du flux du programme au déclenchement et au traitement des événements. en mode événementiel

Quelle est l'importance de l'annotation @JsonIdentityInfo utilisant Jackson en Java ? Quelle est l'importance de l'annotation @JsonIdentityInfo utilisant Jackson en Java ? Sep 23, 2023 am 09:37 AM

L'annotation @JsonIdentityInfo est utilisée lorsqu'un objet a une relation parent-enfant dans la bibliothèque Jackson. L'annotation @JsonIdentityInfo est utilisée pour indiquer l'identité de l'objet lors de la sérialisation et de la désérialisation. ObjectIdGenerators.PropertyGenerator est une classe d'espace réservé abstraite utilisée pour représenter les situations dans lesquelles l'identifiant d'objet à utiliser provient d'une propriété POJO. Syntaxe@Target(value={ANNOTATION_TYPE,TYPE,FIELD,METHOD,PARAMETER})@Retention(value=RUNTIME)public

Explorez la programmation orientée objet dans Go Explorez la programmation orientée objet dans Go Apr 04, 2024 am 10:39 AM

Le langage Go prend en charge la programmation orientée objet via la définition de type et l'association de méthodes. Il ne prend pas en charge l'héritage traditionnel, mais est mis en œuvre par composition. Les interfaces assurent la cohérence entre les types et permettent de définir des méthodes abstraites. Des cas pratiques montrent comment utiliser la POO pour gérer les informations client, notamment la création, l'obtention, la mise à jour et la suppression d'opérations client.

Fonctionnalités avancées PHP : meilleures pratiques en matière de programmation orientée objet Fonctionnalités avancées PHP : meilleures pratiques en matière de programmation orientée objet Jun 05, 2024 pm 09:39 PM

Les meilleures pratiques de POO en PHP incluent les conventions de dénomination, les interfaces et les classes abstraites, l'héritage et le polymorphisme, ainsi que l'injection de dépendances. Les cas pratiques incluent : l'utilisation du mode entrepôt pour gérer les données et l'utilisation du mode stratégie pour mettre en œuvre le tri.

Analyse du modèle Flyweight dans la programmation orientée objet PHP Analyse du modèle Flyweight dans la programmation orientée objet PHP Aug 14, 2023 pm 05:25 PM

Analyse du modèle Flyweight dans la programmation orientée objet PHP Dans la programmation orientée objet, le modèle de conception est une méthode de conception logicielle couramment utilisée, qui peut améliorer la lisibilité, la maintenabilité et l'évolutivité du code. Le modèle Flyweight est l’un des modèles de conception qui réduit la surcharge de mémoire en partageant des objets. Cet article explique comment utiliser le mode poids mouche en PHP pour améliorer les performances du programme. Qu’est-ce que le mode poids mouche ? Le modèle de poids mouche est un modèle de conception structurelle dont le but est de partager le même objet entre différents objets.

Analyse des fonctionnalités orientées objet du langage Go Analyse des fonctionnalités orientées objet du langage Go Apr 04, 2024 am 11:18 AM

Le langage Go prend en charge la programmation orientée objet, définissant des objets via des structures, définissant des méthodes à l'aide de récepteurs de pointeurs et implémentant le polymorphisme via des interfaces. Les fonctionnalités orientées objet assurent la réutilisation, la maintenabilité et l'encapsulation du code dans le langage Go, mais il existe également des limitations telles que le manque de concepts traditionnels de classes et d'héritage et de conversions de signatures de méthodes.

Quel rôle le destructeur joue-t-il dans le polymorphisme en C++ ? Quel rôle le destructeur joue-t-il dans le polymorphisme en C++ ? Jun 03, 2024 pm 08:30 PM

Les destructeurs sont cruciaux dans le polymorphisme C++, garantissant que les objets de classe dérivée nettoient correctement la mémoire lorsqu'ils sont détruits. Le polymorphisme permet à des objets de types différents de répondre au même appel de méthode. Le destructeur est automatiquement appelé lorsqu'un objet est détruit pour libérer sa mémoire. Le destructeur de classe dérivée appelle le destructeur de classe de base pour garantir que la mémoire de la classe de base est libérée.

Existe-t-il des fonctionnalités orientées objet de type classe dans Golang ? Existe-t-il des fonctionnalités orientées objet de type classe dans Golang ? Mar 19, 2024 pm 02:51 PM

Il n'y a pas de concept de classe au sens traditionnel dans Golang (langage Go), mais il fournit un type de données appelé structure, à travers lequel des fonctionnalités orientées objet similaires aux classes peuvent être obtenues. Dans cet article, nous expliquerons comment utiliser les structures pour implémenter des fonctionnalités orientées objet et fournirons des exemples de code concrets. Définition et utilisation des structures Examinons d'abord la définition et l'utilisation des structures. Dans Golang, les structures peuvent être définies via le mot-clé type, puis utilisées si nécessaire. Les structures peuvent contenir des attributs

See all articles