JeuWeb - Crée ton jeu par navigateur
Includes & PHP - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Includes & PHP (/showthread.php?tid=1873)

Pages : 1 2


Includes & PHP - Ludvig - 13-10-2007

Hello !

je galère avec des includes php qui marchent hyper mal.

J'ai tenté include, include_once et même de déclarer une variable
dans chaque fichier du type :
Code PHP :
<?php 
if(!$object_materialsincluded)include"object_materials.php";

Mais ça foire tout le temps quand même.

Le problème c'est quand dans le même .php j'ai deux fonctions qui ont
besoin d'inclure le même fonction.

Disons func.php

si j'ai :

Code PHP :
<?php 
function a()
{
include_once
'func.php';
func();
}

function
b()
{
include_once
'func.php';
func();
}

puis

function doit()
{
a();
b();
}


une appelle à doit() provoque l'erreur.
Il semble que include_once marche le premier fois mais comme c'est dans
un autre scoop, b() n'a pas acces a func().
func() est pourtant declaré comme fonction existant, et on peut plus l'inclure !


Du coup je tombe sur des bug pas faciles a debusquer.
Dernière en date :l'AI qui revetit un monstre qui re-spawn et un de ses
objets avait besoin d'un changement de materiaux :
Code PHP :
<?php 
Fatal error
: Cannot redeclare changematerial() (previously declared in
/home/www/633e972b46c66a28f1faa359a830/web/jeu/object_materials.php:10)
in
/home/www/633e972b46c66a28f1faa359a830/web/jeu/object_materials.php
on line 95

Faut dire aussi que tout est en constant changement du coup je
voudrais trouver un façon "plus" sur pour plus avoir a m'occuper de ce genre de trucs Sad


Vous faites comment vous ? Y a des solutions mieux ?

Peut-on déclarer des fonctions externs comme en C/C++ ?
ou peut-être globales (sans pour autant toujours les includer) pour passer outre le scoop ?


Merci !

/Lud


RE: Includes & PHP - Galaan - 14-10-2007

si a() et b() sont dans le meme fichier tu peux faire :
Code PHP :
<?php 
include_once 'func.php';
function
a()
{
func();
}

function
b()
{
func();
}
Mais j'imagine que ca doit pas etre aussi simple.

Galaan


RE: Includes & PHP - Ludvig - 14-10-2007

Yep car du coup il faut toujours les inclure même si j'en ai pas besoin Smile
(j'en ai des centaines, enfin plein de dizaines ^^)

Merci pour ta réponse !

/Lud


RE: Includes & PHP - arcanis - 14-10-2007

Utilise les classes Wink


RE: Includes & PHP - Ludvig - 14-10-2007

Les fonctions sont chargés dynamiquement avec les classes ?

J'avoue pas utiliser le (sois disons) OOP en php vue que c'est pas compilé
et j'ai peur des mauvaises perfs... mais si les fonctions sont chargés à
la demande on pourrait contourner l'usage des classes et en faire une librairie...

Enfin si les fonctions sont chargés à la volé et pas à l'include... ?

/Lud


RE: Includes & PHP - Ludvig - 17-10-2007

argh, pas possible de faire un include dans une
fonction sans ficher le boxon dans les déclarations ?

Il y a pas de trucs comme 'include globale' ou un truc du genre :heuuu: ?

Mon jeu se repose massivement sur des includes et ça serait
cool de ne plus avoir ce genre d'erreurs assez imprévisibles Smile


Enfin, il n'y a peut-être pas de solution ?


RE: Includes & PHP - Galaan - 17-10-2007

Je suis a peu pres sur qu'il y un moyen de contourner le probleme. Le truc c'est pour pouvoir t'aider il faudrait avoir une vision d'ensemble du code. Et ca, tu es le seul a l'avoir.

Par contre, moi j'ai une petit truc qui me turlupine. Tu as mesure la perte de performance quand tu passes les includes en dehors des fonctions ? C'est vraiment significatif ?

Galaan


RE: Includes & PHP - pascal - 17-10-2007

Ludvig a écrit :argh, pas possible de faire un include dans une
fonction sans ficher le boxon dans les déclarations ?

Il y a pas de trucs comme 'include globale' ou un truc du genre :heuuu: ?

Mon jeu se repose massivement sur des includes et ça serait
cool de ne plus avoir ce genre d'erreurs assez imprévisibles Smile


Enfin, il n'y a peut-être pas de solution ?

tu peux utiliser include_once + un tour de passe passe avec un test :
si la fonction n'existe pas,
alors on la crée

voir la doc sur function_exists


A+

Pascal


RE: Includes & PHP - Findel - 18-10-2007

Si tu écris en POO, tu peux fouiller du côté de la fonction autoload http://www.php.net/autoload

Mais sinon, le mieux reste de prévoir au début de ton script de quels include tu as besoin et de les faire.


RE: Includes & PHP - pascal - 18-10-2007

ha oui, et faire un include_once en plein milieu d'une fonction... bof bof.

tu peux faire l'include_once juste avant la définition de la fonction.

A+

Pascal