recherche
Maisondéveloppement back-endtutoriel phpÀ propos des performances de la fonction magique PHP

Certaines personnes ne recommandent pas l'utilisation de "méthodes magiques". Certaines personnes se demandent si les méthodes magiques ne sont pas autorisées. En fait, ce n'est pas le cas. Cet article analysera avec vous les performances des fonctions magiques. .

Les suggestions d'optimisation sont des suggestions pour empêcher les gens d'en abuser et de les utiliser sans scrupules. Si vous pouvez comprendre ce qui est lent et ce qui est rapide lors de l'écriture de code, évitant ainsi certains appels de méthodes magiques inutiles, c'est l'effet recherché par ceci. suggestion d'optimisation

Douteux

  1. Les performances de la méthode magique sont-elles vraiment mauvaises ?

  2. Y a-t-il toujours un problème avec les performances des méthodes magiques en PHP7 ?

  3. Comment devrions-nous utiliser les méthodes magiques de manière raisonnable ?

Plan

Face à mes doutes, mon plan est :

  • Comparaison statistique entre utiliser la méthode magique et ne pas l'utiliser it Le décalage horaire d'exécution du script de la méthode magique

  • Le script est exécuté en continu n fois sous PHP5.6.26-1

  • La moyenne/minimum temps d'exécution statistique Valeur/Valeur maximale

  • Exécuter en continu le script n fois sous PHP7.0.12-2

  • Statistiques sur la moyenne/minimum/ temps d'exécution maximum Valeur

Actuellement, mes capacités personnelles sont limitées et je ne peux utiliser cette méthode que si vous avez un meilleur plan ou une meilleure suggestion, vous pouvez me le dire, merci, haha~<.>

Test

__construct

Tout d'abord, jetons un coup d'œil à l'expérience de la fonction constructeur __construct Le script php est le suivant :

<?php /**
 * 魔术方法性能探索
 *
 * 构造函数
 *
 * @author TIGERB <https://github.com/TIGERB>
 */

require('./function.php');
if (!isset($argv[1])) {
    die('error: variable is_use_magic is empty');
}
$is_use_magic = $argv[1];

/**
 * 构造函数使用类名
 */
class ClassOne
{
    public function classOne()
    {
        # code...
    }
}

/**
 * 构造函数使用魔术函数__construct
 */
class ClassTwo
{
    public function __construct()
    {
        # code...
    }
}

$a = getmicrotime();
if ($is_use_magic === 'no_magic') {
    new ClassOne();
}else {
    new ClassTwo();
}
$b = getmicrotime();

echo  ($b-$a) . "\n";

    PHP5.6 n'utilise pas les données de la méthode magique comme suit, unité microseconde μm
// PHP5.6中连续调用脚本10000次
sh test 10000 no_magic php5 construct

// 运行数据统计脚本
sh analysis ./logs/__construct_no_magic_php5.log 10000

// 结果
avg: 34μm
max: 483μm
min: 26μm

    PHP5.6 utilise les données de la méthode magique comme suit, l'unité est la microseconde μm
// PHP5.6中连续调用脚本10000次
sh test 10000 magic php5 construct

// 运行数据统计脚本
sh analysis ./logs/__construct_magic_php5.log 10000

// 结果
avg: 28μm
max: 896μm
min: 20μm

    PHP7.0 n'utilise pas la méthode magique. Les données sont les suivantes, l'unité est la microseconde μm
// PHP7.0中连续调用脚本10000次
sh test 10000 no_magic php construct

// 运行数据统计脚本
sh analysis ./logs/__construct_no_magic_php.log 10000

// 结果
avg: 19μm
max: 819μm
min: 13μm

    PHP7.0 utilise le. données de la méthode magique comme suit, en microsecondes μm
// PHP7.0中连续调用脚本10000次
sh test 10000 magic php construct

// 运行数据统计脚本
sh analysis ./logs/__construct_magic_php.log 10000

// 结果
avg: 14μm
max: 157μm
min: 10μm

Nous pouvons voir à partir des données ci-dessus :

Le temps d'exécution moyen d'un Le script utilisant __construct comme constructeur est plus rapide que d'utiliser le nom de la classe comme constructeur,

Probablement plus rapide de 5 à 6 microsecondes

, que ce soit en php5.6 ou php7.0. __call

Ensuite, jetons un coup d'œil à l'expérience __call. Le script php est le suivant :

<?php /**
 * 魔术方法性能探索
 *
 * 构造函数
 *
 * @author TIGERB <https://github.com/TIGERB>
 */

require('./function.php');
if (!isset($argv[1])) {
    die('error: variable is_use_magic is empty');
}
$is_use_magic = $argv[1];

/**
 * 构造函数使用类名
 */
class ClassOne
{
    public function __construct()
    {
        # code...
    }

    public function test()
    {
        # code...
    }
}

/**
 * 构造函数使用魔术函数__construct
 */
class ClassTwo
{
    public function __construct()
    {
        # code...
    }

    public function __call($method, $argus)
    {
        # code...
    }
}

$a = getmicrotime();
if ($is_use_magic === 'no_magic') {
    $instance = new ClassOne();
    $instance->test();
}else {
    $instance = new ClassTwo();
    $instance->test();
}
$b = getmicrotime();

echo  ($b-$a) . "\n";

    PHP5 .6 Les données sans utiliser la méthode magique sont les suivantes, l'unité est la microseconde μm
// PHP5.6中连续调用脚本10000次
sh test 10000 no_magic php5 call

// 运行数据统计脚本
sh analysis ./logs/__call_no_magic_php5.log 10000

// 结果
avg: 27μm
max: 206μm
min: 20μm

    Les données avec PHP5.6 en utilisant la méthode magique est la suivante, l'unité Microseconde μm
// PHP5.6中连续调用脚本10000次
sh test 10000 magic php5 call

// 运行数据统计脚本
sh analysis ./logs/__call_magic_php5.log 10000

// 结果
avg: 29μm
max: 392μm
min: 22μm

    PHP7.0 n'utilise pas le méthode magique. Les données sont les suivantes, l'unité est la microseconde μm
// PHP7.0中连续调用脚本10000次
sh test 10000 no_magic php call

// 运行数据统计脚本
sh analysis ./logs/__call_no_magic_php.log 10000

// 结果
avg: 16μm
max: 256μm
min: 10μm

    PHP7.0 utilise les données de la méthode magique comme suit, en microsecondes μm
// PHP7.0中连续调用脚本10000次
sh test 10000 magic php call

// 运行数据统计脚本
sh analysis ./logs/__call_magic_php.log 10000

// 结果
avg: 18μm
max: 2459μm
min: 11μm

Nous pouvons voir à partir des données ci-dessus :

Le temps d'exécution moyen d'un script utilisant __call est plus lent que cela sans l'utiliser,

environ 2 microsecondes

, peu importe en php5.6 ou php7.0. __callStatic

Ensuite, jetons un coup d'œil à l'expérience __callStatic Le script php est le suivant :

<?php /**
 * 魔术方法性能探索
 *
 * 静态重载函数
 *
 * @author TIGERB <https://github.com/TIGERB>
 */

require('./function.php');
if (!isset($argv[1])) {
    die('error: variable is_use_magic is empty');
}
$is_use_magic = $argv[1];

/**
 * 存在test静态方法
 */
class ClassOne
{
    public function __construct()
    {
        # code...
    }

    public static function test()
    {
        # code...
    }
}

/**
 * 使用重载实现test
 */
class ClassTwo
{
    public function __construct()
    {
        # code...
    }

    public static function __callStatic($method, $argus)
    {
        # code...
    }
}

$a = getmicrotime();
if ($is_use_magic === 'no_magic') {
    ClassOne::test();
}else {
    ClassTwo::test();
}
$b = getmicrotime();

echo  ($b-$a) . "\n";

<.>PHP5 .6 Les données sans méthode magique sont les suivantes, l'unité est la microseconde μm
// PHP5.6中连续调用脚本10000次
sh test 10000 no_magic php5 callStatic

// 运行数据统计脚本
sh analysis ./logs/__callStatic_no_magic_php5.log 10000

// 结果
avg: 25μm
max: 129μm
min: 19μm

Les données avec PHP5 .6 L'utilisation de la méthode magique est la suivante, l'unité est la microseconde μm
// PHP5.6中连续调用脚本10000次
sh test 10000 magic php5 callStatic

// 运行数据统计脚本
sh analysis ./logs/__callStatic_magic_php5.log 10000

// 结果
avg: 28μm
max: 580μm
min: 20μm

PHP7.0 n'utilise pas la méthode magique . Les données sont les suivantes, l'unité est la microseconde μm
// PHP7.0中连续调用脚本10000次
sh test 10000 no_magic php callStatic

// 运行数据统计脚本
sh analysis ./logs/__callStatic_no_magic_php.log 10000

// 结果
avg: 14μm
max: 130μm
min: 9μm

PHP7.0 utilise les données de la méthode magique comme suit, en microsecondes μm
// PHP7.0中连续调用脚本10000次
sh test 10000 magic php callStatic

// 运行数据统计脚本
sh analysis ./logs/__callStatic_magic_php.log 10000

// 结果
avg: 14μm
max: 159μm
min: 10μm
Nous pouvons voir à partir des données ci-dessus :

Le temps d'exécution moyen des scripts utilisant __callStatic en php5.6 est plus lent que de ne pas l'utiliser,

environ 3 microsecondes plus lent

 ; Le temps d'exécution moyen des scripts utilisant __callStatic dans php7.0 est à peu près égal à celui sans __callStatic;

__set

Ensuite, jetons un œil à l'expérience __set , le script php est le suivant :

<?php /**
 * 魔术方法性能探索
 *
 * 设置私有属性__set
 *
 * @author TIGERB <https://github.com/TIGERB>
 */

require('./function.php');
if (!isset($argv[1])) {
    die('error: variable is_use_magic is empty');
}
$is_use_magic = $argv[1];

/**
 * 实现公共方法设置私有属性
 */
class ClassOne
{
    /**
     * 私有属性
     *
     * @var string
     */
    private $someVariable = 'private';

    public function __construct()
    {
        # code...
    }

    public function setSomeVariable($value = '')
    {
        $this->someVariable = $value;
    }
}

/**
 * 使用_set设置私有属性
 */
class ClassTwo
{
    /**
     * 私有属性
     *
     * @var string
     */
    private $someVariable = 'private';

    public function __construct()
    {
        # code...
    }

    public function __set($name = '', $value = '')
    {
        $this->$name = $value;
    }
}

$a = getmicrotime();
if ($is_use_magic === 'no_magic') {
    $instance = new ClassOne();
    $instance->setSomeVariable('public');
}else {
    $instance = new ClassTwo();
    $instance->someVariable = 'public';
}
$b = getmicrotime();

echo  ($b-$a) . "\n";

PHP5.6 n'utilise pas la méthode magique. Les données sont les suivantes, en microsecondes μm
// PHP5.6中连续调用脚本10000次
sh test 10000 no_magic php5 set
// 运行数据统计脚本
sh analysis ./logs/__set_no_magic_php5.log 10000

// 结果
avg: 31μm
max: 110μm
min: 24μm

PHP5.6 utilise les données de la méthode magique comme suit, en microsecondes μm
// PHP5.6中连续调用脚本10000次
sh test 10000 magic php5 set
// 运行数据统计脚本
sh analysis ./logs/__set_magic_php5.log 10000

// 结果
avg: 33μm
max: 138μm
min: 25μm

PHP7.0 n'utilise pas la méthode magique Les données sont les suivantes, en microsecondes μm
// PHP7.0中连续调用脚本10000次
sh test 10000 no_magic php set
// 运行数据统计脚本
sh analysis ./logs/__set_no_magic_php.log 10000

// 结果
avg: 15μm
max: 441μm
min: 11μm

PHP7.0 Les données utilisant la méthode magique sont les suivantes, en microsecondes μm
// PHP7.0中连续调用脚本10000次
sh test 10000 magic php set
// 运行数据统计脚本
sh analysis ./logs/__set_magic_php.log 10000

// 结果
avg: 17μm
max: 120μm
min: 11μm
À partir des données ci-dessus, nous pouvons voir :

utilise __set Le temps d'exécution moyen du script est plus lent que sans lui,

environ 2 microsecondes

, que ce soit en php5.6 ou php7.0.

__get

Ensuite, jetons un coup d'œil à l'expérience __get. Le script php est le suivant :

<?php /**
 * 魔术方法性能探索
 *
 * 读取私有属性__get
 *
 * @author TIGERB <https://github.com/TIGERB>
 */

require('./function.php');
if (!isset($argv[1])) {
    die('error: variable is_use_magic is empty');
}
$is_use_magic = $argv[1];

/**
 * 实现公共方法获取私有属性
 */
class ClassOne
{
    /**
     * 私有属性
     *
     * @var string
     */
    private $someVariable = 'private';

    public function __construct()
    {
        # code...
    }

    public function getSomeVariable()
    {
        return $this->someVariable;
    }
}

/**
 * 使用_get获取私有属性
 */
class ClassTwo
{
    /**
     * 私有属性
     *
     * @var string
     */
    private $someVariable = 'private';

    public function __construct()
    {
        # code...
    }

    public function __get($name = '')
    {
        return $this->$name;
    }
}

$a = getmicrotime();
if ($is_use_magic === 'no_magic') {
    $instance = new ClassOne();
    $instance->getSomeVariable();
}else {
    $instance = new ClassTwo();
    $instance->someVariable;
}
$b = getmicrotime();

echo  ($b-$a) . "\n";

PHP5 .6 Les données sans utiliser la méthode magique sont les suivantes, l'unité est la microseconde μm
// PHP5.6中连续调用脚本10000次
sh test 10000 no_magic php5 get
// 运行数据统计脚本
sh analysis ./logs/__get_no_magic_php5.log 10000

// 结果
avg: 28μm
max: 590μm
min: 20μm

Les données avec PHP5.6 en utilisant la méthode magique est la suivante, l'unité Microseconde μm
    // PHP5.6中连续调用脚本10000次
    sh test 10000 magic php5 get
    // 运行数据统计脚本
    sh analysis ./logs/__get_magic_php5.log 10000
    
    // 结果
    avg: 28μm
    max: 211μm
    min: 22μm

     

    • PHP7.0不使用魔术方法数据如下,单位微秒μm

    // PHP7.0中连续调用脚本10000次
    sh test 10000 no_magic php get
    // 运行数据统计脚本
    sh analysis ./logs/__get_no_magic_php.log 10000
    
    // 结果
    avg: 16μm
    max: 295μm
    min: 10μm

     

    • PHP7.0使用魔术方法数据如下,单位微秒μm

    // PHP7.0中连续调用脚本10000次
    sh test 10000 magic php get
    // 运行数据统计脚本
    sh analysis ./logs/__get_magic_php.log 10000
    
    // 结果
    avg: 19μm
    max: 525μm
    min: 12μm

     

    通过上面的数据我们可以看出:

    在php5.6中使用__get的脚本执行的平均时间是要大致等于不使用__get的;在php7.0中使用__get的脚本执行的平均时间是要慢于不使用, 大概慢3微秒

    结语

    这里主要测试了__construct(), __call(), __callStatic(), __get(), __set()这五个常用的且可有其他实现方式代替的魔法函数。通过上面的测试再回来解答我的疑惑

    1. 魔术方法真的性能比较差吗?

    答:除了使用__construct之外,这里使用其他的魔法方法的时间大致慢10微妙以内。

    1. PHP7里使用魔术方法的性能还是存在问题吗?

    答:在PHP7中使用与不使用魔术方法之间的差异和在PHP5.6中近乎一致。

    1. 我们应该如何合理的使用魔术方法?

    答:通过整个测试我们可以看出使不使用魔法方法这之间的执行时间差异大致都是在10微妙以内的,所以如果魔法方法可以很好的节省我们的开发成本和优化我们的代码结构,我们应该可以考虑牺牲掉这不到10微妙。而__construct是要快的,所以使用__construct应该没什么异议。

    以上内容就是关于PHP 魔法函数性能分析,希望对大家有帮助。

    相关推荐:

    php中关于魔法函数以及魔法常量的使用详解

    详解PHP魔法函数性能的示例代码

    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
    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
    Comment fonctionne la résistance au type PHP, y compris les types scalaires, les types de retour, les types d'union et les types nullables?Comment fonctionne la résistance au type PHP, y compris les types scalaires, les types de retour, les types d'union et les types nullables?Apr 17, 2025 am 12:25 AM

    Le type PHP invite à améliorer la qualité et la lisibilité du code. 1) Conseils de type scalaire: Depuis PHP7.0, les types de données de base sont autorisés à être spécifiés dans les paramètres de fonction, tels que INT, Float, etc. 2) Invite de type de retour: Assurez la cohérence du type de valeur de retour de fonction. 3) Invite de type d'union: Depuis PHP8.0, plusieurs types peuvent être spécifiés dans les paramètres de fonction ou les valeurs de retour. 4) Invite de type nullable: permet d'inclure des valeurs nulles et de gérer les fonctions qui peuvent renvoyer les valeurs nulles.

    Comment PHP gère le clonage des objets (mot-clé de clone) et la méthode de magie __clone?Comment PHP gère le clonage des objets (mot-clé de clone) et la méthode de magie __clone?Apr 17, 2025 am 12:24 AM

    Dans PHP, utilisez le mot-clé Clone pour créer une copie de l'objet et personnalisez le comportement de clonage via la méthode de magie du clone \ _ \ _. 1. Utilisez le mot-clé Clone pour faire une copie peu profonde, en clonant les propriétés de l'objet mais pas aux propriétés de l'objet. 2. La méthode du clone \ _ \ _ peut copier profondément les objets imbriqués pour éviter les problèmes de copie superficiels. 3. Faites attention pour éviter les références circulaires et les problèmes de performance dans le clonage et optimiser les opérations de clonage pour améliorer l'efficacité.

    PHP vs Python: cas d'utilisation et applicationsPHP vs Python: cas d'utilisation et applicationsApr 17, 2025 am 12:23 AM

    PHP convient aux systèmes de développement Web et de gestion de contenu, et Python convient aux scripts de science des données, d'apprentissage automatique et d'automatisation. 1.Php fonctionne bien dans la création de sites Web et d'applications rapides et évolutifs et est couramment utilisé dans CMS tel que WordPress. 2. Python a permis de manière remarquable dans les domaines de la science des données et de l'apprentissage automatique, avec des bibliothèques riches telles que Numpy et Tensorflow.

    Décrivez différents en-têtes de mise en cache HTTP (par exemple, contrôle du cache, ETAG, dernier modifié).Décrivez différents en-têtes de mise en cache HTTP (par exemple, contrôle du cache, ETAG, dernier modifié).Apr 17, 2025 am 12:22 AM

    Les acteurs clés des en-têtes de cache HTTP incluent le contrôle du cache, l'ETAG et la dernière modification. 1.CACHE-Control est utilisé pour contrôler les politiques de mise en cache. Exemple: Cache-Control: Max-Age = 3600, public. 2. Etag vérifie les changements de ressources par le biais d'identifiants uniques, exemple: ETAG: "686897696A7C876B7E". 3.Last-modifié indique le dernier temps de modification de la ressource, exemple: dernier modifié: mer, 21oct201507: 28: 00gmt.

    Expliquez le hachage de mot de passe sécurisé dans PHP (par exemple, Password_Hash, Password_verify). Pourquoi ne pas utiliser MD5 ou SHA1?Expliquez le hachage de mot de passe sécurisé dans PHP (par exemple, Password_Hash, Password_verify). Pourquoi ne pas utiliser MD5 ou SHA1?Apr 17, 2025 am 12:06 AM

    Dans PHP, Password_Hash et Password_verify Les fonctions doivent être utilisées pour implémenter le hachage de mot de passe sécurisé, et MD5 ou SHA1 ne doit pas être utilisé. 1) Password_hash génère un hachage contenant des valeurs de sel pour améliorer la sécurité. 2) Password_verify Vérifiez le mot de passe et assurez-vous la sécurité en comparant les valeurs de hachage. 3) MD5 et SHA1 sont vulnérables et manquent de valeurs de sel, et ne conviennent pas à la sécurité de mot de passe moderne.

    PHP: une introduction au langage des scripts côté serveurPHP: une introduction au langage des scripts côté serveurApr 16, 2025 am 12:18 AM

    PHP est un langage de script côté serveur utilisé pour le développement Web dynamique et les applications côté serveur. 1.Php est un langage interprété qui ne nécessite pas de compilation et convient au développement rapide. 2. Le code PHP est intégré à HTML, ce qui facilite le développement de pages Web. 3. PHP traite la logique côté serveur, génère une sortie HTML et prend en charge l'interaction utilisateur et le traitement des données. 4. PHP peut interagir avec la base de données, traiter la soumission du formulaire et exécuter les tâches côté serveur.

    PHP et le Web: explorer son impact à long termePHP et le Web: explorer son impact à long termeApr 16, 2025 am 12:17 AM

    PHP a façonné le réseau au cours des dernières décennies et continuera de jouer un rôle important dans le développement Web. 1) PHP est originaire de 1994 et est devenu le premier choix pour les développeurs en raison de sa facilité d'utilisation et de son intégration transparente avec MySQL. 2) Ses fonctions principales incluent la génération de contenu dynamique et l'intégration à la base de données, ce qui permet au site Web d'être mis à jour en temps réel et affiché de manière personnalisée. 3) La large application et l'écosystème de PHP ont motivé son impact à long terme, mais il fait également face à des mises à jour de version et à des défis de sécurité. 4) Les améliorations des performances ces dernières années, telles que la sortie de PHP7, lui permettent de rivaliser avec les langues modernes. 5) À l'avenir, PHP doit faire face à de nouveaux défis tels que la conteneurisation et les microservices, mais sa flexibilité et sa communauté active le rendent adaptable.

    Pourquoi utiliser PHP? Avantages et avantages expliquésPourquoi utiliser PHP? Avantages et avantages expliquésApr 16, 2025 am 12:16 AM

    Les principaux avantages du PHP comprennent la facilité d'apprentissage, un soutien solide sur le développement Web, les bibliothèques et les cadres riches, les performances élevées et l'évolutivité, la compatibilité multiplateforme et la rentabilité. 1) Facile à apprendre et à utiliser, adapté aux débutants; 2) une bonne intégration avec les serveurs Web et prend en charge plusieurs bases de données; 3) ont des cadres puissants tels que Laravel; 4) Des performances élevées peuvent être obtenues grâce à l'optimisation; 5) prendre en charge plusieurs systèmes d'exploitation; 6) Open source pour réduire les coûts de développement.

    See all articles

    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)
    1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. Meilleurs paramètres graphiques
    1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. Comment réparer l'audio si vous n'entendez personne
    1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. Commandes de chat et comment les utiliser
    1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌

    Outils chauds

    MinGW - GNU minimaliste pour Windows

    MinGW - GNU minimaliste pour Windows

    Ce projet est en cours de migration vers osdn.net/projects/mingw, vous pouvez continuer à nous suivre là-bas. MinGW : un port Windows natif de GNU Compiler Collection (GCC), des bibliothèques d'importation et des fichiers d'en-tête librement distribuables pour la création d'applications Windows natives ; inclut des extensions du runtime MSVC pour prendre en charge la fonctionnalité C99. Tous les logiciels MinGW peuvent fonctionner sur les plates-formes Windows 64 bits.

    Version crackée d'EditPlus en chinois

    Version crackée d'EditPlus en chinois

    Petite taille, coloration syntaxique, ne prend pas en charge la fonction d'invite de code

    SublimeText3 version chinoise

    SublimeText3 version chinoise

    Version chinoise, très simple à utiliser

    SublimeText3 Linux nouvelle version

    SublimeText3 Linux nouvelle version

    Dernière version de SublimeText3 Linux

    Envoyer Studio 13.0.1

    Envoyer Studio 13.0.1

    Puissant environnement de développement intégré PHP