IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

variable static différence entre .NET et PHP


Sujet :

C#

  1. #1
    Membre confirmé Avatar de Sayrus
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    899
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 899
    Points : 570
    Points
    570
    Par défaut variable static différence entre .NET et PHP
    Bonjour,

    je viens de découvrir un merveilleux language qu'est le C# en .NET.

    J'ai remarqué aussi qu'il était super easy de créer des variables static pour que quand par exemple, un nouveau visiteur se connecte, celle-ci soit incrémentée de 1. De plus, cette variable est gardé en mémoire tant que le serveur n'est pas reboot! Génial.

    Cependant en PHP, pour l'orienté objet, avec une variable de type static, ça ne marche pas comme ça. J'ai remarqué que ce n'était valable que pour la session de l'user en cours. Donc si j'incrémente ma variable et que je l'affiche, ça fera toujours 1.

    N'y a t il vraiment pas moyen d'avoir le même système en PHP qu'en .NET?

    Merci

  2. #2
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    PHP fonctionne en exécutant un script pour chaque accès à une page. Il propose une méthode simple pour partager des données entre deux accès successifs par un même utilisateur (à travers le système de sessions). En revanche, il n'existe pas de moyen simple de partager des données entre deux accès de deux utilisateurs différents.

    C'est une question de fonctionnement: les scripts PHP ne restent pas actifs en mémoire, contrairement aux assemblies .NET dans certaines configurations.

    La solution la plus fréquente à ce problème est d'utiliser une base de données (ou un fichier sur le disque) pour stocker une information qui persistera entre deux exécutions de scripts. Tu peux utiliser pour cela les fonctions PHP usuelles.

    Attention, cependant, en PHP comme en C# tout cela ne gère pas par défaut les accès multiples. Si la configuration de ton serveur lui permet de répondre à plusieurs utilisateurs à la fois, alors il est possible que des race conditions apparaissent, et que les valeurs persistantes (variables static, base de données, fichier sur le disque) deviennent incohérente. Ainsi, il faut que tu t'assures que l'atomicité de tes modifications est respectée (par exemple à l'aide de verrous).

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 88
    Points : 81
    Points
    81
    Par défaut
    Pour compléter ce que dit Arkadir, pour éviter des problèmes de concurrence quand tu incrémentes ta variable static visitors, utilise le mot clé lock :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    lock (visitors)
                {
                    visitors++;
                }
    Ca te garantit qu'un seul thread sera dans cette portion de code en meme temps, les autres attendront leur tour.

    bonne journée

  4. #4
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Points : 706
    Points
    706
    Par défaut
    Pour incrémenter une variable, Il est intéressant d'utiliser la méthode statique Increment de la classe Interlocked. Cette méthode est plus performante que l'instruction lock, d'ailleurs c'est recommandé par MSDN.

  5. #5
    Membre confirmé Avatar de Sayrus
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    899
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 899
    Points : 570
    Points
    570
    Par défaut
    Merci pour ces quelques informations!

    Est-il possible d'avoir un harz62 comme l'a proposé ArianeV?


  6. #6
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Points : 706
    Points
    706
    Par défaut
    Citation Envoyé par Sayrus Voir le message
    Est-il possible d'avoir un harz62 comme l'a proposé ArianeV?
    Tu voulais peut être dire une instruction lock ?

    Si c'est la question oui j'ai juste fais référence à la classe Interlocked pour la performance mais l'instruction lock produira un effet similaire.

Discussions similaires

  1. Choisir une mission entre .NET et PHP
    Par pitbulle dans le forum Emploi
    Réponses: 8
    Dernier message: 20/07/2009, 20h54
  2. portée variable static java entre 2 contextes
    Par c+cool dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 20/04/2009, 09h57
  3. relever différences entre deux fichiers php
    Par midiweb dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 04/03/2008, 09h34
  4. [.NET/COM+] Différence entre .NET et COM+
    Par zsoh dans le forum Framework .NET
    Réponses: 3
    Dernier message: 31/08/2007, 14h18
  5. Réponses: 4
    Dernier message: 07/07/2006, 17h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo