JeuWeb - Crée ton jeu par navigateur

Version complète : Includes & PHP
Vous consultez actuellement la version basse qualité d’un document. Voir la version complète avec le bon formatage.
Pages : 1 2
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
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
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
Utilise les classes Wink
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
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 ?
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
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
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.
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
Pages : 1 2