Problème de variable static

Problème de variable static - PHP - Programmation

Marsh Posté le 15-11-2005 à 15:51:16    

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

Reply

Marsh Posté le 15-11-2005 à 15:51:16   

Reply

Marsh Posté le 15-11-2005 à 15:52:40    

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

Reply

Marsh Posté le 15-11-2005 à 15:55:36    

J'utilise Php 4.3.10

Reply

Marsh Posté le 15-11-2005 à 16:11:41    

Dans ce cas il te faut la version 5

Reply

Marsh Posté le 15-11-2005 à 17:45:50    

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

Reply

Marsh Posté le 15-11-2005 à 17:47:09    

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

Reply

Marsh Posté le 15-11-2005 à 18:48:34    

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

Reply

Marsh Posté le 15-11-2005 à 18:55:34    

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

Reply

Marsh Posté le 15-11-2005 à 19:06:55    

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

Reply

Marsh Posté le 16-11-2005 à 09:48:01    

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é.

Reply

Marsh Posté le 16-11-2005 à 09:48:01   

Reply

Marsh Posté le 16-11-2005 à 10:19:08    

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
Reply

Marsh Posté le 16-11-2005 à 10:25:26    

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
Reply

Marsh Posté le 16-11-2005 à 10:32:24    

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


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 16-11-2005 à 10:33:28    

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 -
Reply

Marsh Posté le 16-11-2005 à 10:51:22    

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.

Reply

Marsh Posté le 16-11-2005 à 10:52:23    

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

Reply

Marsh Posté le 16-11-2005 à 10:53:34    

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 -
Reply

Marsh Posté le 16-11-2005 à 11:13:22    

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.
 

Reply

Marsh Posté le 16-11-2005 à 11:15:55    

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 -
Reply

Marsh Posté le 16-11-2005 à 11:25:50    

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

Reply

Marsh Posté le 16-11-2005 à 11:50:54    

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 -
Reply

Marsh Posté le 16-11-2005 à 13:20:59    

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.

Reply

Marsh Posté le 16-11-2005 à 14:25:18    

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
Reply

Marsh Posté le 16-11-2005 à 14:26:50    

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 ?

Reply

Marsh Posté le 16-11-2005 à 14:30:28    

sinon ca n'irait pas avec sybase_pconnect() ?

Reply

Marsh Posté le 16-11-2005 à 15:00:02    

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.

Reply

Marsh Posté le 16-11-2005 à 15:14:39    

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
Reply

Marsh Posté le 16-11-2005 à 15:19:50    

faire une session commune à tout le monde ???

Reply

Marsh Posté le 16-11-2005 à 16:15:46    

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.

Reply

Marsh Posté le 17-11-2005 à 02:04:03    

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

Reply

Marsh Posté le 17-11-2005 à 02:23:36    

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

Reply

Marsh Posté le 17-11-2005 à 04:07:54    

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

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed