Quel est le principe du mécanisme de réflexion de Java ?
Le principe du mécanisme de réflexion Java est que lorsqu'un fichier de bytecode est chargé dans la mémoire, le jvm disséquera le bytecode et créera un objet Class de l'objet. Le jvm stockera les informations du fichier de bytecode. sont stockés dans l'objet Class. Tant que l'objet Class est obtenu, l'objet peut être utilisé pour définir les propriétés ou les méthodes de l'objet. Le mécanisme de réflexion a pour fonction de connaître tous les attributs et méthodes de n'importe quelle classe dans l'état d'exécution. Pour n'importe quel objet, il peut appeler n'importe lequel de ses attributs et méthodes, obtenir dynamiquement des informations et appeler dynamiquement des méthodes d'objet.

Le système d'exploitation pour ce tutoriel : système Windows 10, Java version 19.0.1, ordinateur Dell G3.
1. Réflexion
1.1 Aperçu de la réflexion
Mécanisme de réflexion : À l'état d'exécution, pour n'importe quelle classe, vous pouvez connaître toutes les propriétés et méthodes de cette classe ; pour n'importe quel objet, vous pouvez appeler n'importe laquelle de ses propriétés et méthodes ; cette fonction d'obtention dynamique d'informations et d'appel dynamique de méthodes d'objet est appelée La réflexion ; mécanisme du langage java
Cela fonctionne comme ceci : lorsqu'un fichier de bytecode est chargé en mémoire, le jvm va disséquer le bytecode puis créer une classe de l'objet Object, jvm stocke toutes les informations du bytecode dans l'objet Class. Tant que nous obtenons l'objet Class, nous pouvons utiliser l'objet pour définir les propriétés de l'objet ou appeler la méthode de l'objet et d'autres opérations.
反射可以动态获取类的信息,进一步实现需要的功能 例如: Spring框架通过XML文件描述类的基本信息,使用反射机制动态装配对象
Pourquoi faut-il réfléchir ?
Les objets d'un programme Java peuvent apparaître sous deux types au moment de l'exécution, à savoir le type au moment de la compilation et le type au moment de l'exécution. Par exemple, Person p = new Student();, cette ligne de code générera une variable p dont le type de compilation est Person et le type d’exécution est Student.
Parfois, le programme reçoit un objet transmis de l'extérieur pendant l'exécution. Le type de compilation de l'objet est Object, mais le programme doit appeler la méthode de type d'exécution de l'objet. Cela nécessite que le programme doive découvrir les informations réelles des objets et des classes au moment de l'exécution. Il existe deux manières de résoudre ce problème :
La première consiste à supposer que le type est entièrement connu au moment de la compilation. et runtime Dans ce cas, vous pouvez d'abord utiliser l'opérateur instanceof pour déterminer, puis utiliser la conversion de type forcée pour la convertir en une variable de son type d'exécution.
La deuxième méthode est qu'il est impossible de prédire à quelles classes l'objet et la classe peuvent appartenir au moment de la compilation. Le programme s'appuie uniquement sur les informations d'exécution pour découvrir les informations réelles de l'objet et de la classe, qui. demande réflexion.
Plus précisément, grâce au mécanisme de réflexion, nous pouvons réaliser les opérations suivantes :
Lorsque le programme est en cours d'exécution, l'objet Class de n'importe quelle classe peut être obtenu par réflexion, et par cet objet Afficher les informations de cette classe ;
Lorsque le programme est en cours d'exécution, vous pouvez créer une instance de n'importe quelle classe par réflexion et accéder aux membres de l'instance
Quand ; le programme est en cours d'exécution, vous pouvez utiliser la réflexion. Le mécanisme génère une classe proxy dynamique ou un objet proxy dynamique d'une classe.
1.2 Trois façons d'obtenir un objet Classe
Il existe trois façons d'obtenir un objet Classe :
Nom de la classe Attribut .class
Object name.getClass() méthode
Class.forName (nom complet de la classe) méthode
Ces trois méthodes sont respectivement dans The le programme n'utilise pas d'appels d'étape. La relation entre l'étape d'exécution du programme et la méthode de classe d'acquisition est la suivante : Exemple de code#🎜🎜 #
class ReflectDemo {
public static void main(String[] args) throws ClassNotFoundException {
// 1.Class类中的静态方法forName("全类名")
//全类名:包名 - 类名
Class clazz1 = Class.forName("com.fanshe.Student");
System.out.println(clazz1);
// 2.通过class属性来获取
Class clazz2 = Student.class;
System.out.println(clazz2);
// 3.利用对象的getClass方法来获取class对象
// getClass方法是定义在Object类中.
Student s = new Student();
Class clazz3 = s.getClass();
System.out.println(clazz3);
System.out.println(clazz1 == clazz2);
System.out.println(clazz2 == clazz3);
}
}Les résultats d'exécution sont les suivants : 
Les trois méthodes peuvent obtenir l'objet de cette classe, et les trois classes sont égales.
1.3 La réflexion récupère le constructeur et l'applique
1.3.1 Méthode de classe pour obtenir l'objet constructeur#🎜🎜 #
Introduction à la méthode
1.3.2 Exemple de code
package com.fanshe;
import java.lang.reflect.Constructor;
public class Student {
private String name;
private int age;
// 私有的有参构造方法
private Student(String name) {
System.out.println("name的值为:" + name);
System.out.println("private...Student的有参构造方法");
}
// 公共的无参构造方法
public Student() {
System.out.println("public...Student的无参构造方法");
}
// 公共的有参构造方法
public Student(String name, int age) {
System.out.println("name的值为:" + name + "age的值为:" + age);
System.out.println("public...Student的有参构造方法");
}
}
class ReflectDemo {
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException {
System.out.println("获取所有公共构造方法对象的数组===========");
method1();
System.out.println("获取单个构造方法对象===========");
method2();
System.out.println("获取所有构造方法对象的数组===========");
method3();
System.out.println("获取单个构造方法对象===========");
method4();
}
private static void method4() throws ClassNotFoundException, NoSuchMethodException {
// Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes):
// 返回单个构造方法对象
//1.获取Class对象
Class clazz = Class.forName("com.fanshe.Student");
System.out.println("String+int的构造");
Constructor constructor = clazz.getDeclaredConstructor(String.class,int.class);
System.out.println(constructor);
System.out.println("String的构造");
constructor=clazz.getDeclaredConstructor(String.class);
System.out.println(constructor);
}
private static void method3() throws ClassNotFoundException, NoSuchMethodException {
// Constructor<T> getConstructor(Class<?>... parameterTypes):
// 返回单个公共构造方法对象
//1.获取Class对象
Class clazz = Class.forName("com.fanshe.Student");
//小括号中,一定要跟构造方法的形参保持一致.
Constructor constructor1 = clazz.getConstructor();
System.out.println(constructor1);
Constructor constructor2 = clazz.getConstructor(String.class, int.class);
System.out.println(constructor2);
//因为Student类中,没有只有一个int的构造,所以这里会报错.
// Constructor constructor3 = clazz.getConstructor(int.class);
// System.out.println(constructor3);
}
private static void method2() throws ClassNotFoundException {
// Constructor<?>[] getDeclaredConstructors():
// 返回所有构造方法对象的数组
//1.获取Class对象
Class clazz = Class.forName("com.fanshe.Student");
Constructor[] constructors = clazz.getDeclaredConstructors();
for (Constructor constructor : constructors) {
System.out.println(constructor);
}
}
private static void method1() throws ClassNotFoundException {
// Constructor<?>[] getConstructors():
// 返回所有公共构造方法对象的数组
//1.获取Class对象
Class clazz = Class.forName("com.fanshe.Student");
Constructor[] constructors = clazz.getConstructors();
for (Constructor constructor : constructors) {
System.out.println(constructor);
}
}
}# 🎜 🎜#Les résultats d'exécution sont les suivants : 
1.3.3 Méthodes utilisées par la classe Constructor pour créer des objets
# 🎜🎜#Introduction à la méthode
1.3.4 Exemple de code#🎜🎜 #Remarque : les membres modifiés privés ne peuvent pas être utilisés directement. Si vous utilisez la réflexion pour les obtenir et les utiliser, vous devez annuler temporairement le contrôle d'accès #
1.3.5 Résumé
#🎜. 🎜#Obtenir l'objet de classe
#🎜🎜 #Récupérez l'objet constructeur à l'intérieurpackage com.fanshe;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
public class Student {
private String name;
private int age;
// 私有的有参构造方法
private Student(String name) {
System.out.println("name的值为:" + name);
System.out.println("private...Student的有参构造方法");
}
// 公共的无参构造方法
public Student() {
System.out.println("public...Student的无参构造方法");
}
// 公共的有参构造方法
public Student(String name, int age) {
System.out.println("name的值为:" + name + "age的值为:" + age);
System.out.println("public...Student的有参构造方法");
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
// T newInstance(Object... initargs):根据指定的构造方法创建对象
class ReflectDemo2 {
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
method1();
method2();
method3();
method4();
}
private static void method4() throws ClassNotFoundException, NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException {
//获取一个私有的构造方法并创建对象
//1.获取class对象
Class clazz = Class.forName("com.fanshe.Student");
//2.获取一个私有化的构造方法.
Constructor constructor = clazz.getDeclaredConstructor(String.class);
//被private修饰的成员,不能直接使用的
//如果用反射强行获取并使用,需要临时取消访问检查
constructor.setAccessible(true);
//3.直接创建对象
Student student = (Student) constructor.newInstance("zhangsan");
System.out.println(student);
}
private static void method3() throws ClassNotFoundException, InstantiationException, IllegalAccessException {
//简写格式
//1.获取class对象
Class clazz = Class.forName("com.fanshe.Student");
//2.在Class类中,有一个newInstance方法,可以利用空参直接创建一个对象
Student student = (Student) clazz.newInstance();//这个方法现在已经过时了,了解一下
System.out.println(student);
}
private static void method2() throws ClassNotFoundException, NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException {
//1.获取class对象
Class clazz = Class.forName("com.fanshe.Student");
//2.获取构造方法对象
Constructor constructor = clazz.getConstructor();
//3.利用空参来创建Student的对象
Student student = (Student) constructor.newInstance();
System.out.println(student);
}
private static void method1() throws ClassNotFoundException, NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException, InvocationTargetException {
//1.获取class对象
Class clazz = Class.forName("com.fanshe.Student");
//2.获取构造方法对象
Constructor constructor = clazz.getConstructor(String.class, int.class);
//3.利用newInstance创建Student的对象
Student student = (Student) constructor.newInstance("杨天真", 22);
System.out.println(student);
}
}S'il est public, créez l'objet directement
getConstructor (Class<?>... parameterTypes) getDeclaredConstructor (Class<?>... parameterTypes)#🎜 🎜#S'il n'est pas public, vous devez annuler temporairement la vérification puis créer l'objet
setAccessible(boolean) 暴力反射
1.4 反射获取成员变量并使用
1.4.1 Class类获取成员变量对象的方法
方法分类

1.4.2 示例代码
package com.fanshe;
import java.lang.reflect.Field;
public class Student {
public String name;
public int age;
public String gender;
private int money = 300;
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", gender='" + gender + '\'' +
", money=" + money +
'}';
}
}
class ReflectDemo {
public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException {
method1();
method2();
method3();
method4();
}
private static void method4() throws ClassNotFoundException, NoSuchFieldException {
// Field getDeclaredField(String name):返回单个成员变量对象
System.out.println("返回单个成员变量对象==================");
//1.获取class对象
Class clazz = Class.forName("com.fanshe.Student");
//2.获取money成员变量
Field field = clazz.getDeclaredField("money");
//3.打印一下
System.out.println(field);
}
private static void method3() throws ClassNotFoundException, NoSuchFieldException {
// Field getField(String name):返回单个公共成员变量对象
System.out.println("返回单个公共成员变量对象==================");
//想要获取的成员变量必须是真实存在的
//且必须是public修饰的.
//1.获取class对象
Class clazz = Class.forName("com.fanshe.Student");
//2.获取name这个成员变量
Field field = clazz.getField("name");
//3.打印一下
System.out.println(field);
}
private static void method2() throws ClassNotFoundException {
// Field[] getDeclaredFields():返回所有成员变量对象的数组
System.out.println("返回所有成员变量对象的数组==================");
//1.获取class对象
Class clazz = Class.forName("com.fanshe.Student");
//2.获取所有的Field对象
Field[] fields = clazz.getDeclaredFields();
//3.遍历
for (Field field : fields) {
System.out.println(field);
}
}
private static void method1() throws ClassNotFoundException {
// Field[] getFields():返回所有公共成员变量对象的数组
System.out.println("返回所有公共成员变量对象的数组==================");
//1.获取class对象
Class clazz = Class.forName("com.fanshe.Student");
//2.获取Field对象.
Field[] fields = clazz.getFields();
//3.遍历
for (Field field : fields) {
System.out.println(field);
}
}
}运行结果如下:

1.4.3 Field类用于给成员变量赋值的方法
方法介绍

1.4.4 示例代码
package com.fanshe;
import java.io.File;
import java.lang.reflect.Field;
public class Student {
public String name;
public int age;
public String gender;
private int money = 300;
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", gender='" + gender + '\'' +
", money=" + money +
'}';
}
}
class ReflectDemo {
public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException, InstantiationException {
// Object get(Object obj) 返回由该 Field表示的字段在指定对象上的值。
method1();
method2();
}
private static void method2() throws ClassNotFoundException, NoSuchFieldException, InstantiationException, IllegalAccessException {
//1.获取class对象
Class clazz = Class.forName("com.fanshe.Student");
//2.获取成员变量Field的对象
Field field = clazz.getDeclaredField("money");
//3.取消一下访问检查
field.setAccessible(true);
//4.调用get方法来获取值
//4.1创建一个对象
Student student = (Student) clazz.newInstance();
//4.2获取指定对象的money的值
Object o = field.get(student);
//5.打印一下
System.out.println(o);
}
private static void method1() throws ClassNotFoundException, NoSuchFieldException, InstantiationException, IllegalAccessException {
// void set(Object obj, Object value):给obj对象的成员变量赋值为value
//1.获取class对象
Class clazz = Class.forName("com.fanshe.Student");
//2.获取name这个Field对象
Field fieldname = clazz.getField("name");
Field fieldage = clazz.getField("age");
//3.利用set方法进行赋值.
//3.1先创建一个Student对象
Student student = (Student) clazz.newInstance();
//3.2有了对象才可以给指定对象进行赋值
fieldname.set(student,"杨天真");
fieldage.set(student,12);
System.out.println(student);
}
}运行结果如下:

1.5 反射获取成员方法并使用
1.5.1 Class类获取成员方法对象的方法
方法分类

1.5.2 示例代码
package com.fanshe;
import java.lang.reflect.Method;
public class Student {
//私有的,无参无返回值
private void show() {
System.out.println("私有的show方法,无参无返回值");
}
//公共的,无参无返回值
public void function1() {
System.out.println("function1方法,无参无返回值");
}
//公共的,有参无返回值
public void function2(String name) {
System.out.println("function2方法,有参无返回值,参数为" + name);
}
//公共的,无参有返回值
public String function3() {
System.out.println("function3方法,无参有返回值");
return "aaa";
}
//公共的,有参有返回值
public String function4(String name) {
System.out.println("function4方法,有参有返回值,参数为" + name);
return "bbb";
}
}
class ReflectDemo {
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException {
method1();
method2();
method3();
method4();
method5();
}
private static void method5() throws ClassNotFoundException, NoSuchMethodException {
// Method getDeclaredMethod(String name, Class<?>... parameterTypes):
// 返回单个成员方法对象
//1.获取class对象
Class clazz = Class.forName("com.fanshe.Student");
//2.获取一个成员方法show
Method method = clazz.getDeclaredMethod("show");
//3.打印一下
System.out.println(method);
}
private static void method4() throws ClassNotFoundException, NoSuchMethodException {
//1.获取class对象
Class clazz = Class.forName("com.fanshe.Student");
//2.获取一个有形参的方法function2
Method method = clazz.getMethod("function2", String.class);
//3.打印一下
System.out.println(method);
}
private static void method3() throws ClassNotFoundException, NoSuchMethodException {
// Method getMethod(String name, Class<?>... parameterTypes) :
// 返回单个公共成员方法对象
//1.获取class对象
Class clazz = Class.forName("com.fanshe.Student");
//2.获取成员方法function1
Method method1 = clazz.getMethod("function1");
//3.打印一下
System.out.println(method1);
}
private static void method2() throws ClassNotFoundException {
// Method[] getDeclaredMethods():
// 返回所有成员方法对象的数组,不包括继承的
//1.获取class对象
Class clazz = Class.forName("com.fanshe.Student");
//2.获取Method对象
Method[] methods = clazz.getDeclaredMethods();
//3.遍历一下数组
for (Method method : methods) {
System.out.println(method);
}
}
private static void method1() throws ClassNotFoundException {
// Method[] getMethods():返回所有公共成员方法对象的数组,包括继承的
//1.获取class对象
Class clazz = Class.forName("com.fanshe.Student");
//2.获取成员方法对象
Method[] methods = clazz.getMethods();
//3.遍历
for (Method method : methods) {
System.out.println(method);
}
}
}运行结果为 :

1.5.3 Method类用于执行方法的方法
方法介绍

参数说明:
参数一: 用obj对象调用该方法
参数二: 调用方法的传递的参数(如果没有就不写)
返回值: 方法的返回值(如果没有就不写)
1.5.4 示例代码
package com.fanshe;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class Student {
//私有的,无参无返回值
private void show() {
System.out.println("私有的show方法,无参无返回值");
}
//公共的,无参无返回值
public void function1() {
System.out.println("function1方法,无参无返回值");
}
//公共的,有参无返回值
public void function2(String name) {
System.out.println("function2方法,有参无返回值,参数为" + name);
}
//公共的,无参有返回值
public String function3() {
System.out.println("function3方法,无参有返回值");
return "aaa";
}
//公共的,有参有返回值
public String function4(String name) {
System.out.println("function4方法,有参有返回值,参数为" + name);
return "bbb";
}
}
class ReflectDemo {
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InstantiationException, InvocationTargetException, InvocationTargetException {
// Object invoke(Object obj, Object... args):运行方法
// 参数一:用obj对象调用该方法
// 参数二:调用方法的传递的参数(如果没有就不写)
// 返回值:方法的返回值(如果没有就不写)
//1.获取class对象
Class clazz = Class.forName("com.fanshe.Student");
//2.获取里面的Method对象 function4
Method method = clazz.getMethod("function4", String.class);
//3.运行function4方法就可以了
//3.1创建一个Student对象,当做方法的调用者
Student student = (Student) clazz.newInstance();
//3.2运行方法
Object result = method.invoke(student, "杨天真");
//4.打印一下返回值
System.out.println(result);
}
}运行结果为:

2.反射的应用
Java的反射机制在实际项目中应用广泛,常见的应用场景有:
使用JDBC时,如果要创建数据库的连接,则需要先通过反射机制加载数据库的驱动程序 ;
多数框架都支持注解/XML配置,从配置中解析出来的类是字符串,需要利用反射机制实例化;
面向切面编程(AOP)的实现方案,是在程序运行时创建目标对象的代理类,这必须由反射机制来实现。
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!
Outils d'IA chauds
Undress AI Tool
Images de déshabillage gratuites
Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes
AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.
Clothoff.io
Dissolvant de vêtements AI
Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !
Article chaud
Outils chauds
Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit
SublimeText3 version chinoise
Version chinoise, très simple à utiliser
Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP
Dreamweaver CS6
Outils de développement Web visuel
SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)
Sujets chauds
Conseils pour écrire des commentaires PHP
Jul 18, 2025 am 04:51 AM
La clé pour rédiger des commentaires PHP est de clarifier l'objectif et les spécifications. Les commentaires devraient expliquer "pourquoi" plutôt que "ce qui a été fait", en évitant la redondance ou trop de simplicité. 1. Utilisez un format unifié, tel que DocBlock (/ * /) pour les descriptions de classe et de méthode afin d'améliorer la lisibilité et la compatibilité des outils; 2. Soulignez les raisons de la logique, telles que pourquoi les sauts JS doivent être sortis manuellement; 3. Ajoutez une description d'une vue d'ensemble avant le code complexe, décrivez le processus dans les étapes et aidez à comprendre l'idée globale; 4. Utilisez TODO et FIXME Rationalement pour marquer des éléments et des problèmes de tâches pour faciliter le suivi et la collaboration ultérieurs. De bonnes annotations peuvent réduire les coûts de communication et améliorer l'efficacité de la maintenance du code.
Rédaction de commentaires PHP efficaces
Jul 18, 2025 am 04:44 AM
Les commentaires ne peuvent pas être négligents car ils veulent expliquer les raisons de l'existence du code plutôt que des fonctions, telles que la compatibilité avec les anciennes interfaces ou les restrictions tierces, sinon les personnes qui lisent le code ne peuvent s'appuyer que sur de la devinettes. Les zones qui doivent être commentées comprennent des jugements conditionnels complexes, une logique spéciale de gestion des erreurs et des restrictions de dérivation temporaires. Une façon plus pratique d'écrire des commentaires consiste à sélectionner des commentaires en une seule ligne ou à bloquer les commentaires en fonction de la scène. Utilisez des commentaires sur le bloc de documents pour expliquer les paramètres et les valeurs de retour au début des fonctions, des classes et des fichiers, et gardez les commentaires à jour. Pour une logique complexe, vous pouvez ajouter une ligne à la précédente pour résumer l'intention globale. En même temps, n'utilisez pas de commentaires pour sceller le code, mais utilisez des outils de contrôle de version.
Améliorer la lisibilité avec les commentaires
Jul 18, 2025 am 04:46 AM
La clé pour écrire de bons commentaires est d'expliquer "pourquoi" plutôt que "ce qui a été fait" pour améliorer la lisibilité du code. 1. Les commentaires devraient expliquer des raisons logiques, telles que les considérations derrière la sélection de la valeur ou le traitement; 2. Utilisez des annotations de paragraphe pour une logique complexe pour résumer l'idée globale des fonctions ou des algorithmes; 3. Maintenir régulièrement des commentaires pour garantir la cohérence avec le code, éviter les tromperies et supprimer le contenu obsolète si nécessaire; 4. Vérifiez de manière synchrone les commentaires lors de l'examen du code et enregistrez la logique publique via des documents pour réduire le fardeau des commentaires du code.
Commentaires PHP efficaces
Jul 18, 2025 am 04:33 AM
La clé pour rédiger des commentaires PHP est claire, utile et concise. 1. Les commentaires devraient expliquer l'intention derrière le code plutôt que de simplement décrire le code lui-même, comme expliquer l'objectif logique des jugements conditionnels complexes; 2. Ajouter des commentaires aux scénarios clés tels que les valeurs magiques, la compatibilité du code ancien, les interfaces API, etc. pour améliorer la lisibilité; 3. Évitez le contenu du code en double, gardez-le concis et spécifique et utilisez des formats standard tels que PHPDOC; 4. Les commentaires doivent être mis à jour de manière synchrone avec le code pour garantir la précision. De bons commentaires doivent être pensés du point de vue des autres, réduire le coût de la compréhension et devenir un dispositif de navigation de compréhension du code.
Configuration de l'environnement de développement PHP
Jul 18, 2025 am 04:55 AM
La première étape consiste à sélectionner le package d'environnement intégré XAMPP ou MAMP pour créer un serveur local; La deuxième étape consiste à sélectionner la version PHP appropriée en fonction des besoins du projet et de configurer la commutation de la version multiple; La troisième étape consiste à sélectionner VScode ou PhpStorm comme éditeur et déboguer avec xdebug; De plus, vous devez installer Composer, PHP_CODESNIFFER, PHPUNIT et d'autres outils pour aider au développement.
PHP commentant la syntaxe
Jul 18, 2025 am 04:56 AM
Il existe trois façons courantes d'utiliser les commentaires PHP: les commentaires en une seule ligne conviennent à l'explication brièvement de la logique de code, telle que // ou # pour l'explication de la ligne actuelle; Commentaires multi-lignes /*...*/ convient à une description détaillée des fonctions ou des classes; COMMENTAIRES DOCUMENTS DOCBLOCK Commencez par / ** pour fournir des informations rapides pour l'IDE. Lorsque vous l'utilisez, vous devez éviter les bêtises, continuez à mettre à jour de manière synchrone et n'utilisez pas de commentaires pour bloquer les codes pendant longtemps.
Opérateurs de comparaison PHP
Jul 18, 2025 am 04:57 AM
Les opérateurs de comparaison PHP doivent faire attention aux problèmes de conversion de type. 1. Utiliser == pour comparer les valeurs uniquement, et la conversion de type sera effectuée, comme 1 == "1" est vraie; 2. Utilisation === Pour nécessiter la même valeur que le type, tel que 1 === "1" est faux; 3. La comparaison de taille peut être utilisée sur les valeurs et les chaînes, telles que "Apple"
Comprendre les commentaires PHP
Jul 18, 2025 am 04:24 AM
Les commentaires PHP sont des parties du code utilisées pour interpréter la logique, les tâches de balise ou bloquer temporairement le code et ne sont pas exécutées par le serveur. Ses fonctions principales incluent: 1. Améliorer la lisibilité du code, ce qui facilite une compréhension rapide des autres et du moi futur; 2. Prend en charge deux formats: commentaires en une seule ligne (// ou #) et commentaires multi-lignes (//); 3. Common utilise des descriptions de fonctions de couverture, des explications logiques complexes, des marques de TODO et du code de désactivation pendant le débogage; 4. Les commentaires efficaces devraient éviter le code en double, expliquer les raisons plutôt que les opérations, le garder concis et ajouter des enregistrements de version si nécessaire, améliorant ainsi considérablement l'efficacité de maintenance du code.


