Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2827 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Problème de variable static

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème de variable static

n°1246089
madkane
Posté le 15-11-2005 à 15:51:16  profilanswer
 

Bonjour,  
 
je n'arrive pas a utiliser les variables statique dan PHP, j'ai easyPHP1.8.
Lorsque je fais

Citation :

du copier coller du web, j'obtiens le message
 
[quote]Parse error: parse error, expecting `T_OLD_FUNCTION' or `T_FUNCTION' or `T_VAR' or `'}'' in c:\program files\easyphp1-8


 
Je lance le code:
 

Citation :

<?php
class Foo
{
   public static $my_static = 'foo';
 
   public function staticValue() {
       return self::$my_static;
   }
}
 
class Bar extends Foo
{
 
   public function fooStatic() {
       return parent::$my_static;
   }
}
 
 
print Foo::$my_static . "\n";
 
$foo = new Foo();
print $foo->staticValue() . "\n";
print $foo->my_static . "\n";      // propriété my_static non définie
 
// $foo::my_static n'est pas possible
 
print Bar::$my_static . "\n";
$bar = new Bar();
print $bar->fooStatic() . "\n";
?>


 
Touver sur le manuel de référence en ligne
 
MErci

mood
Publicité
Posté le 15-11-2005 à 15:51:16  profilanswer
 

n°1246091
sielfried
Posté le 15-11-2005 à 15:52:40  profilanswer
 

J'imagine que c'est du PHP5, et que ton EasyPHP utilise une v4.

n°1246095
madkane
Posté le 15-11-2005 à 15:55:36  profilanswer
 

J'utilise Php 4.3.10

n°1246118
sky_strike​r
Posté le 15-11-2005 à 16:11:41  profilanswer
 

Dans ce cas il te faut la version 5

n°1246228
madkane
Posté le 15-11-2005 à 17:45:50  profilanswer
 

Php 4.3.10 est obligatoier dans mon cas. Merci quand même

n°1246229
omega2
Posté le 15-11-2005 à 17:47:09  profilanswer
 

justement, php5 est obliguatoire pour utiliser "static".
Donc à toi de choisir, soit tu fais du php4.x sans static, soit tu passes au php5.

n°1246253
Mara's dad
Yes I can !
Posté le 15-11-2005 à 18:48:34  profilanswer
 

"static" est autorisé en PHP 4, c'est le "extends" qui n'existe pas.

n°1246257
naceroth
Posté le 15-11-2005 à 18:55:34  profilanswer
 

Mara's dad a écrit :

"static" est autorisé en PHP 4, c'est le "extends" qui n'existe pas.


 
extends existe aussi en php 4, essaye encore :D

n°1246260
Mara's dad
Yes I can !
Posté le 15-11-2005 à 19:06:55  profilanswer
 

Toutafé, ze dis n'importe quoi...

n°1246545
madkane
Posté le 16-11-2005 à 09:48:01  profilanswer
 

Merci à vous.
"Omega :Donc à toi de choisir, soit tu fais du php4.x sans static, soit tu passes au php5"
Le seul souci c'est que je dois développer un site pour un client qui est sous PHP4 (imposé par le client et en plus sous Sybase la merde). J'ai vu toutes les facilités apportées par PHP5 et je suis dégouté.

mood
Publicité
Posté le 16-11-2005 à 09:48:01  profilanswer
 

n°1246571
art_dupond
je suis neuneu... oui oui !!
Posté le 16-11-2005 à 10:19:08  profilanswer
 

au pire, tu fais une variable de session (j'espère que je ne viens pas de dire une grosse bêtise [:hebus_san] )


---------------
oui oui
n°1246578
Xav_
The only one...
Posté le 16-11-2005 à 10:25:26  profilanswer
 

art_dupond a écrit :

au pire, tu fais une variable de session (j'espère que je ne viens pas de dire une grosse bêtise [:hebus_san] )


 
Meme si si la variable est déclaré en variable de session, je suis pas du tout convaincu qu'elle soit accessible a l'intérieur de la fonction :(
as-tu vraiement besoin d'un static ??? c'est quand meme une utilisation bien particulière....


---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
n°1246583
skeye
Posté le 16-11-2005 à 10:32:24  profilanswer
 

AMHA c'est déjà sur "public", qu'il gueule...:o


---------------
Can't buy what I want because it's free -
n°1246584
skeye
Posté le 16-11-2005 à 10:33:28  profilanswer
 

En remplacant public par var pour la varible et par rien du tout pour les fonctions ça doit même pouvoir passer, tout ça, non?:o


---------------
Can't buy what I want because it's free -
n°1246599
madkane
Posté le 16-11-2005 à 10:51:22  profilanswer
 

Voilà mon histoire, je crée une connexion dans mon index.php.  
J'obtiens un db_link retourné par  $db_link = sybase_connect(...) , c'est exactement comme sous Php.
Je veux que toutes mes pages utilise ce lien.
Etant donner que je fais de l'objet, je voulais un objet PoolConnection qui conserve ce $db_link (d'où le static) et me le renverrai dans les pages suivantes.  
Ceci pourrait m'éviter de passer cette variable en parametre de chaque classe.  
J'espère ne pas raconter de bétises.

n°1246601
madkane
Posté le 16-11-2005 à 10:52:23  profilanswer
 

Note: les variables sessions ne sont pas accessibles dans les fonctions

n°1246602
skeye
Posté le 16-11-2005 à 10:53:34  profilanswer
 

skeye a écrit :

En remplacant public par var pour la varible et par rien du tout pour les fonctions ça doit même pouvoir passer, tout ça, non?:o


 
Tu as essayé?:o


---------------
Can't buy what I want because it's free -
n°1246614
madkane
Posté le 16-11-2005 à 11:13:22  profilanswer
 

En fait, j'ai fait un test.
Je fais get() et set(nomVariable) dans une variable définit comme VAR.
Premier cas, dans une classe.
Si j'ai plusieurs page, je devrais créer un objet pour chaque page et ma variable de classe aura toujours la valeur par défaut et non celle que j'aurai Set(...)  
Deuxieme cas.
Pour les fonctions, je ne vois pas comment je peux utiliser le même principe que les classe. Je peux passer en paramètre le db_link mais comment je la récupére en suite puisque je veux récupérer la valeur sans donné de paramètes.
 

n°1246616
skeye
Posté le 16-11-2005 à 11:15:55  profilanswer
 

hein?
Je te demande si tu as essayé de faire les modifs dont je parlais sur ton exemple, là...:o
Et de toute manière si tu espères qu'une variable static va garder sa valeur d'une page à l'autre par magie tu rêves, hein...[:pingouino]


---------------
Can't buy what I want because it's free -
n°1246624
madkane
Posté le 16-11-2005 à 11:25:50  profilanswer
 

J'ai fais les modifs que tu as dis et ça marche pas.
Je pensais que les variables static était des variables partagées par toutes les instances d'un même objet... A bonne entendeur salut

n°1246644
skeye
Posté le 16-11-2005 à 11:50:54  profilanswer
 

madkane a écrit :

J'ai fais les modifs que tu as dis et ça marche pas.
Je pensais que les variables static était des variables partagées par toutes les instances d'un même objet... A bonne entendeur salut


 
C'est le cas...mais toutes les instances d'un même script!!


---------------
Can't buy what I want because it's free -
n°1246700
omega2
Posté le 16-11-2005 à 13:20:59  profilanswer
 

Si tu veux du persistant d'une page à l'autre, c'est les sessions qu'il faut utiliser et encore ca ne sera propre qu'a un visiteur donné. Il y a rien de mieux pour ça sans passer par un espace de stockage générique à tout le monde (fichiers, base de donnée ...) et ca n'est pas possible pour tout. Par exemple rien ne garantie qu'une variable contenant une référence à une conection réseau/base de donnée indique toujours une conection valide quand elle est utilisé dans un autre script.
 
Si tu veux du persistant à l'intérieur d'un seul et même script pour plusieurs objects de la même classe, il faut utiliser static mais c'est pas ce que t'as l'air de vouloir faire ce coup ci.
 
En tout cas, quel que soit le langage web scripté (asp, php, perl ...) une fois la page généré, tous les objects sont détruit et toutes les classes et fonctions sont oubliés. C'est pour ça que les valeurs "static" ne passent pas d'une page à l'autre. A ma conaissance, seuls des programmes CGI permettent de s'affranchir de cette limitation sous certaines conditions et les scripts php n'en font pas partie.

n°1246759
Xav_
The only one...
Posté le 16-11-2005 à 14:25:18  profilanswer
 

omega2 a écrit :

En tout cas, quel que soit le langage web scripté (asp, php, perl ...) une fois la page généré, tous les objects sont détruit et toutes les classes et fonctions sont oubliés. C'est pour ça que les valeurs "static" ne passent pas d'une page à l'autre. A ma conaissance, seuls des programmes CGI permettent de s'affranchir de cette limitation sous certaines conditions et les scripts php n'en font pas partie.


tu peux quand meme feinté en sérialisant ton objet dans une variable de session...
- La session permet a cette variable d'etre accessible depuis n'importe quelle page.
- le unserialize te fait retrouver ton objet dans l'état ou il était au moment du sérialize.
 
j'ai pas encore mis en pratique, mais c'est ce qu'il me semblair avoir compris... ais-je dis une connerie ???
Mais je compte justement mettre en partique dans le cas par exemple d'un site de vente -> ton panier est un objet, ce qui permet d'avoir facilement les notions d'ajout/suppression d'article, modification de quantité, calcul de TVA, application d'une remise client... et avec la sérialisation dans une variable de session, ça doit etre aisé de garder les infos au cours de la navigation...
 


---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
n°1246760
art_dupond
je suis neuneu... oui oui !!
Posté le 16-11-2005 à 14:26:50  profilanswer
 

madkane a écrit :

Note: les variables sessions ne sont pas accessibles dans les fonctions


 
t'es sur ? chez moi ca marche :??:  
 
 

Code :
  1. <?
  2. session_start();
  3. if(!isset($_SESSION['pout'])) {
  4. $_SESSION['pout'] = 1;
  5. }
  6. class facile {
  7. function plus() {
  8.  ++$_SESSION['pout'];
  9. }
  10. }
  11. $pafacile = new facile();
  12. $pafacile->plus();
  13. echo $_SESSION['pout'];
  14. ?>


 
 
affiche;

Citation :

2,3,4,5, ...


 
 
 
edit: je viens de voir que register_global était à 'ON'. Ca viendrait de ca ?

n°1246766
art_dupond
je suis neuneu... oui oui !!
Posté le 16-11-2005 à 14:30:28  profilanswer
 

sinon ca n'irait pas avec sybase_pconnect() ?

n°1246797
omega2
Posté le 16-11-2005 à 15:00:02  profilanswer
 

Xav_ a écrit :

tu peux quand meme feinté en sérialisant ton objet dans une variable de session...
- La session permet a cette variable d'etre accessible depuis n'importe quelle page.
- le unserialize te fait retrouver ton objet dans l'état ou il était au moment du sérialize.

J'ai pas dis le contraire, mais tu dois quand même la stocker quelque part si tu veux que ca soit commun à tout le monde ou la mettre dans une session si c'est jsute pour la personne actuelle, et si ta variable est un accés ftp ou à une base de donnée, tu risques de te retrouver déconecté dés la page suivante. Donc aucune garantie pour ce genre de cas.

n°1246810
Xav_
The only one...
Posté le 16-11-2005 à 15:14:39  profilanswer
 

pour la partie "commun à tout le monde" je suis tout à fait d'accord, faut un stockage externe, on est OK... avec les risques de valeur obsolète que ça comporte...


---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
n°1246815
art_dupond
je suis neuneu... oui oui !!
Posté le 16-11-2005 à 15:19:50  profilanswer
 

faire une session commune à tout le monde ???

n°1246882
madkane
Posté le 16-11-2005 à 16:15:46  profilanswer
 

Je viens de lire tout ce que vous avez écrit et c'est vrai que je n'appellais pas correctement ma variable session.
J'ai une question bête à vous poser. Je dois faire un site en PHP et je veux savoir comment vous fêtes au niveau de la connection à la base de données. Est-ce que vous fêtes une nouvelle connection à la base à chaque requête?
Plusieurs personnes vont se connecter à la base en même temps (c'est pas nouveau) et je pensais utiliser la même connection à chaque fois( bonne ou mauvaise idée?)
 J'ai également lu que le pconnect était une connection persistante c'est à dire qu'on récupère un identifiant de connection si une connection a déjà été établit. Elle récupère un identifiant global (pour tout les utilisateurs) ou par sessions.  
Merci de m'éclairer sur ces sujets.

n°1247283
leflos5
On est ou on est pas :)
Posté le 17-11-2005 à 02:04:03  profilanswer
 

madkane a écrit :

Je viens de lire tout ce que vous avez écrit et c'est vrai que je n'appellais pas correctement ma variable session.
J'ai une question bête à vous poser. Je dois faire un site en PHP et je veux savoir comment vous fêtes au niveau de la connection à la base de données. Est-ce que vous fêtes une nouvelle connection à la base à chaque requête?
Plusieurs personnes vont se connecter à la base en même temps (c'est pas nouveau) et je pensais utiliser la même connection à chaque fois( bonne ou mauvaise idée?)
 J'ai également lu que le pconnect était une connection persistante c'est à dire qu'on récupère un identifiant de connection si une connection a déjà été établit. Elle récupère un identifiant global (pour tout les utilisateurs) ou par sessions.  
Merci de m'éclairer sur ces sujets.


 
Une connexion se fait entre un client et un serveur :)  
Ton client c'est le serveur php qui demande une connexion au sgbd.
Mais le sgbd comme le serveur php ne sait pas qui demande la page donc et donc une connexion :)
T'en a donc une nouvelle à chaque script la connexion étant fermée à la fin de l'exécution du script :)
 
Avec une connexion persistante, tant que tu la fermes pas elle reste ouverte donc tu peux t'en reservir :)
 
Maintenant si t'as une seule et unique connexion va y avoir un problème très rapidement si 2 personnes veulent s'en servir en même temps :D
 
Donc dans des applis où tu connais le nombre de connectés (limité) et nécessitant des fortes contraintes d'authentification pourquoi pas :) Mais si on parle de web-internet (par opposition au web-appli pro) autant  garder des connexions à la demande, entre 2 pages t'en a plus besoin et tu sais pas quand t'en auras besoin de nouveau :)
 
Donc de toutes manières faut au moins une connexion par utilisateur qu'elle soit persistante ou non ;)
 
Après à toi de voir le besoin en terme de connectivité Bd pour le persistant ou non ;)
 
Mais dans un script, une connexion reste ouverte jusqu'à la fin de toutes manières ;)
 
Donc du web de base non controlé en terme de nombre d'utilisateurs autorisés et simultanés (sans compter le paramétrage des serveurs) autant voir pour de la connexion par script, surtout si tu nous fais un truc avec un utilisateur comun  :whistle:
 
Fait un test avec un connexion unique et 2 utilisateurs dessus tu vas voir :D

n°1247289
naceroth
Posté le 17-11-2005 à 02:23:36  profilanswer
 

madkane a écrit :

...
J'ai une question bête à vous poser. Je dois faire un site en PHP et je veux savoir comment vous fêtes au niveau de la connection à la base de données. Est-ce que vous fêtes une nouvelle connection à la base à chaque requête?
Plusieurs personnes vont se connecter à la base en même temps (c'est pas nouveau) et je pensais utiliser la même connection à chaque fois( bonne ou mauvaise idée?)
...


 
Personnellement, à moins d'avoir un contrôle sur le/les serveur(s), laisse tomber les connexions persistantes, ça ne se justifie que rarement et les problèmes qui peuvent en découdre n'en valent à mon sens pas la peine.
 
PS : leflos5, tu peux arrêter de mettre des smileys à la fin de chaque phrase s'il plaît, le point, c'est bien aussi comme signe de ponctuation. :D

n°1247299
leflos5
On est ou on est pas :)
Posté le 17-11-2005 à 04:07:54  profilanswer
 

naceroth a écrit :

Personnellement, à moins d'avoir un contrôle sur le/les serveur(s), laisse tomber les connexions persistantes, ça ne se justifie que rarement et les problèmes qui peuvent en découdre n'en valent à mon sens pas la peine.
 
PS : leflos5, tu peux arrêter de mettre des smileys à la fin de chaque phrase s'il plaît, le point, c'est bien aussi comme signe de ponctuation. :D


Pardon j'avais même pas fait attention :D :P

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Problème de variable static

 

Sujets relatifs
[HTML] problème lecture accent par google...Probleme d'exception pour lecture fichier
[flash mx 2004] Problème de texteareaProbleme avec rmic
Pb de free d'une variable en C sous Windows 2003 TSprobléme centrer un menu CSS!!!
Probleme de TextFormatProblème .htaccess
comment tester si une variable est un entier numérique ???passer une variable sur 2 pages
Plus de sujets relatifs à : Problème de variable static


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR