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


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

J'imagine que sont include doit etre dans un if donc il ne veut pas le faire si la condition est pas vrai. J'en reviens a ma question : est-ce que le gain en performance est vraiment significatif ?

Galaan


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

Tu peux aussi utiliser un truc qui vient du C :
malib.php
Code :
<?php

!defined('H_MALIB') or return false; // Quitter l'inclusion si jamais la constante a déjà été définie
define('H_MALIB', true); // Définir la constante, les futures inclusions de ce fichier seront donc interrompues à la ligne précédente

function a() {
  //...
}

//...

Ainsi tu seras sûr de pouvoir inclure sereinement ce fichier dans d'autres scripts, même sans utiliser include_once.
Pour faire court, tu ajoutes simplement en première ligne de tes fichiers de déclaration de fonctions la ligne "!defined('H_NOM-UNIQUE') or return false; define('H_NOM-UNIQUE', true);"

Note que si tu utilises partout "include_once" en lieu et place de "include" tu n'auras pas le problème que tu nous indiques. Ce n'est tout simplement pas possible, il reste donc des include simples quelque part Wink


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

Message effacé par erreur par naholyr...

[edit lud] pas grave, j'ai trouvé un vieux copie, donc tout y est peut-être pô :p


Merci pour tout ces réponses !

Dans le désordre :

@Findel
>Si tu écris en POO,

Oui mais il faudrait inclure des classes tout le temps et de plus mon
code est ce qu'il y a de plus "function-nel Wink "

@Galaan
Hormis les frames qui contient de l'information (caracs, carte etc) j'ai
une page qui include l'action que le joueur decide de réaliser (après
des tests anti triche, un include là aussi dépendant de l'action) et
comme il y en a beaucoup d'actions, et que certains peuvent dépendre
d'autres actions alors il faudrait que j'includerait le tout dans la page
"action" c.a.d un surpoids de ~300kb et qui grandira des que je rajoute
des nouvelles fonctionnalités/actions...
donc je pense que ça nuirait au perfs un de ces 4 Smile

@pascaltje
>ha oui, et faire un include_once en plein milieu d'une fonction... bof bof.
Même réponse qu'à Galaan ^^
Sinon c'est vraiment pratique, j'ai des fichiers d'include pour selectionner
un certain chose (objet non identifié, ennemie, moi-même,...), un qui
fais de l'anti triche et l'action lui même.
Puis dans le DB une liste des noms d'actions et quel fichier inclure.
Je peux alors rajouter une nouvelle sortilège en quelques clics et 1 copier
colle et cela sans toucher aux perfs ...

@naholyr
j'ai essayé des choses de type :

if(!$included_nomfunc)include 'nom_func.php';
Et ca marche pas.
Ni le include_once.

Mais j'ai enfin trouvé ce qui ne va pas dans le php :

Quand on fais une include (_once) dans un fichier, le NOM du fonction
est déclaré d'un façon globale mais le fonction lui même est déclaré
dans le scoop du fonction !

On peux dont pas l'appeler car on a pas accès, mais on ne peut pas non
plus le rédéclarer vue que le nom est déjà pris d'un façon globale !


[edit lud²] le reste du message doit se trouver dans le grand cimetière internet des messages perdus :haha:


RE: Includes & PHP - Dradge - 19-10-2007

C'est avec une problématique comme celle-ci que l'utilisation de l'objet est un plaisir.

Sinon pour le problème, je préconise l'utilisation de function_exists pour encadrer la définition de chacune des fonctions.


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

j'ai l'impression que c'est un problème d'architecture tout ça, et que tu devrais passer à l'objet, avec des design pattern pour gérer toutes les actions ( strategy ? )

A+

Pascal


RE: Includes & PHP - naholyr - 19-10-2007

Je suis vraiment désolé, j'ai effacé ton message par erreur en me trompant de bouton (éditer au lieu de quote...). J'ai eu beau jouer du back/forward ce fut peine perdue, je suis confus...

Enfin bref voici ma réponse :

Citation :car j'ai enfin trouvé ce qui ne va pas dans le php :

Quand on fais un include (_once) dans un fichier, le NOM du fonction
est déclaré d'un façon globale mais le fonction lui même est déclaré
dans le scoop du fonction !
C'est faux, exemple :

lib.php
Code PHP :
<?php 
function coucou() {
echo
"coucou\n";
}

main.php
Code PHP :
<?php 
function test1() {
include_once
'lib.php'; // Je n'inclus mon fichier que dans cette fonction, via include_once
coucou();
}

function
test2() {
// Ici je n'inclus pas mon fichier, j'ai pourtant bien accès à coucou si test1() a été appelée avant
coucou();
}

test1(); // la fonction coucou() est maintenant accessible
test2(); // la preuve...
test1(); // include_once me permet de m'assurer que le fichier ne sera pas inclus cette fois
// en revanche coucou() est toujours accessible
coucou(); // elle est bien accessible globalement

Résultat de l'exécution de main.php
Citation :coucou
coucou
coucou
coucou

Il n'y a pas en PHP (contrairement à Javascript, où ce que tu as dit y est bien vrai) de "portée" de déclaration d'une fonction ou d'une classe. Quelque soit l'endroit où tu déclares une fonction ou une classe, elle est globale.

Donc ton problème ne vient pas de là.

En ce qui concerne le commentaire de pascaltje sur les include_once au milieu d'une fonction, je ne suis pas tout-à-fait d'accord, ça peut parfaitement se justifier. Si le fichier n'est pas toujours utilisé, il peut être bon de ne l'inclure que si on en a besoin, c'est par exemple ce qu'a fait PEAR::Cache_Lite (et ce que permet de manière transparente l'__autoload finalement) qui n'inclut le fichier de déclaration de PEAR::Error qu'uniquement en cas d'erreur Wink


RE: Includes & PHP - joshua - 19-10-2007

Ca y est, encore un admin qui abuse de ses pouvoirs Big Grin


RE: Includes & PHP - exopi - 19-10-2007

Moi aussi j'ai eu ce genre de probleme, et j'ai reussit à le resoudre grace à eval :

$fichier=file_gets_contents('fichier.php');
eval($fichier.';');


RE: Includes & PHP - naholyr - 19-10-2007

Heu là je vais être méchant mais : ça c'est la pire des solutions possibles, ça ne résoud rien (l'erreur function already declared surviendra quand-même), ça prend des ressources infiniment supérieures à un simple include (pour aucun gain), et c'est une source de faille potentielle (toute utilisation d'eval est une source de faille potentielle).


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

arf, maintenant c'est moi qui est confus , j'arrive pas a reproduire le bug ...

Se peut-il que j'ai oublié un include quelque part :pleure2:

Merci pour tout les réponses, je vais écumer mon code plus en profondeur (ça s'approche d'un mega du code quand même) ...


Juste à pascaltje :
Le oop à pour moi aucun utilité dans mon projet, pour des gros projets OK,
pour du C++ OK, pour quelques lignes de php écrit d'une personne bof bof...
enfin je dis ça, c'est mon avis personnelle hein Wink

/Lud