Vous n'êtes pas identifié(e).
Héhé,
Merci pour ta réponse, mais dans le monde professionnel tu as rarement le choix de la technologie sur laquelle tu travail. Alors quand tu arrive sur un projet et qu'on te dit : "Ok, ben faut optimiser tout ça, Bonne chance." Et que le projet en question est en PHP, ben tu cherche comment est ce que tu peux faire pour gagner de la mémoire. Et pour pouvoir le faire efficacement, tu commences par te demander sur quoi est ce que tu peux gagner de manière importante, une fois que tu as trouvé, tu cherches là où tu peux "grapiller".
Donc mon problème est de savoir comment est ce que PHP gère ces variables et surtout comment est ce qu'il les stockent...
La réponse la plus probable que j'ai trouvé (parce que encore une fois je n'ai pas trouvé de doc là-dessus...) c'est qu'il fait de l'allocation par pallier. Et qu'une fois qu'il atteint sa limite de pallier, il ré-alloue de la mémoire au prochain pallier...
Mais bon, je peux pas vraiment le confirmer... hélas
Héhé,
En ce qui me concerne, je suis plus en train de m'orienter vers du Flex pour faire ce genre de chose ^^
Et en effet ta grid a l'air bien pratique elle me fait un peu penser à celles que j'ai pu croiser quand j'ai fais du .Net (coïncidence ?
) Il lui faudrait une petite fonction de classement sur les colonnes ^^
Hello,
je débarque dans le débat mais ça m'empêche pas de donner mon avis aussi ![]()
Le javascript pose de nombreux problème navigateur, c'est pour ça que pour ma part, si je peux éviter, j'évite... Maintenant c'est souvent bien pratique pour faire des vérifications de formulaires et autre joyeusetés de ce style, faire des vérifications ergonomique qui n'impose pas à l'utilisateur de rafraichir son formulaire...
Alors du coup pour ne pas me prendre la tête avec la partie chiante de JS, à savoir la gestion de navigateur (et qui respecte le DOM et quelles fonctions sont dispos pour ce navigateur etc etc...) j'utilise maintenant jQuery qui fonctionne franchement bien et qui, à ta décharge Pierrot, utilise aussi JSON comme moyen de retour.
MK : Faire du XML avec du JS c'est chiant comme la mort..., parcourir le XML relève de la gageure alors qu'avec JSON, un tableau et le monde est beau ^^
Hello,
C'est quoi ton parser de XML ?
Petite remarque au passage: Ca coute pas grand chose de mettre des variables intermédiaires
:
Y a autre chose qui me surprends dans ton code, c'est que la variable '$attributes' est déclarée et assignée au début, mais ensuite dans le 1er foreach, elle est écrasée...
Est ce que ton problème ne viendrai pas de là ? ![]()
Hello,
Ce que je reproche à ton code :
1. La méthode IsPage() n'est pas franchement utile, mais c'est une bonne idée
Depuis PHP5 tu peux forcer les types d'objets attendu dans la fonction en précisant leur type dans la déclaration :
2. Même si on fait de l'objet pour faire de l'objet, je ne vois pas trop à quoi sert ton objet PageToBeIncluded ?
3. Et plus important, tu n'as pas posté ton 'main' le script 'central' qui va exécuter ton code. Parce que c'est bien beau de faire des objets, mais si tu t'en sers pas c'est pas vraiment la peine
Je te dis ça surtout parce que tu peux pas faire de conception parfaite du premier coup. Alors tu fais un premier truc, tu t'en sers et s'est quand tu t'en sers que tu te rends compte qu'il y a des choses qui ne sont pas pratiques, des choses que tu peux améliorer...
Donc fais ton main et poste le et à partir de là on pourra commencer à parler comment tes objets s'articulent entre eux ![]()
Bon courage ![]()
![]()
Je retiens le dicton ^^ et je mettrai un copyright à chaque utilisation ![]()
Hello,
2 -> Alors notation à dos de chameaux, consiste à alterner majuscule et minuscule dans un nom de variable :
$sCeciEstNoteEnDosDeChameaux
3 -> je te renvoi au point 2 et 1 => $sMyVariable (anglais, dos de chameaux et préfixage)
Par ailleurs, j'avais essayé le plus possible de faire des fonctions sans argument : cela a-t-il un interet ?
Il n'y a pas de règle concernant ce point il faut que tu fasse en fonction du besoin.
Et si je sépare ma class en deux, à savoir une class PageDemandee et une class PagesAutorisees, où devrait avoir lieu le test "savoir si la page est autorisé ? dans la class PageDemandee où je construit une fonction avec argument PagesAutorisees ? Dans la class PagesAutorisees ? Dans une autre class ? Ou alors dans PageDemandee crée une nouvelle variable $autorisee ?
Tu as un problème de conception ici. Tes classes PageDemandee et PageAutorisee sont en fait des objets Page le fait que la page soit autorisée ou pas ne les concernent pas.
Donc la bonne méthode si tu veux faire comme ça c'est d'avoir 2 objets :
Page (Page.class.php)
PageControler (PageControler.class.php)
(je te rajoute un point '10' à ma liste des bonnes pratiques => Les noms de classe commencent avec des majuscules et un point '11' => Les classes sont stockées dans des fichiers nommés comme ça : MaClasse.class.php)
L'objet PageControler doit comporter une méthode qui à partir de l'url et des paramètres passés dans celle-ci, te construit un objet de type Page. Une autre méthode de cet objet PageControler reçoit en param l'objet Page et cette méthode te retourne "true" ou "false" pour te dire si elle autorisées ou pas.
Je te laisse essayer de pondre un code à partir de ça et on corrigera après ![]()
Alors,
Quand on fait de l'objet tu as 2 types de politiques :
Politique stricte (utilisé dans les langages à typage fort genre Java et C# .Net)
Politique souple (utilisé uniquement avec les langages qui le permettent genre PHP et JS)
[Ces termes n'ont rien conventionnel, c'est du cru à moi perso
]
Quand tu es dans une politique souple il faut savoir s'arrêter dans l'"objetisation"...
Ca veut dire qu'il faut savoir faire de l'objet utile, si tu commence à faire des objets pour tout et n'importe quoi, tu vas rendre ton code lourd à la lecture et donc rendre la maintenance plus dure pour quelqu'un qui n'a jamais touché à ton code...
Si tu commence à faire un objet dans lequel tu te rends compte qu'il n'y a en fait que 1 ou 2 membres... C'est peut être pas franchement utile, un tableau peut faire l'affaire. En revanche si tu code une fonction qui doit être capable de renvoyer plusieurs valeurs :
ex : Imagine que dans ton objet Page tu ai une méthode info() qui te donne le nom de la page, chemin sur le disque, la date de création et l'utilisateur a créé la page
Dans un cas comme celui-ci, le principe "D'encapsulation" de la programmation objet doit t'obliger à créer un objet de type PageInfos avec des getters et des setters pour que tu puisse récupérer le contenu de ton objet sans savoir comment est construit l'objet.
Voilà pour la réponse sur la liste d'objet ![]()
Pour ce qui est de tes méthodes, elles me semblent assez logique et intelligentes.
Si tu veux faire le truc en un peu plus pro :
1. Tu commences par coder en anglais (ça parait rien mais ça évite les phrases de "franglais" dans le code qui n'est compréhensible que par l'auteur du code...)
2. Utilise une notation à dos de chameaux en mode Java (on commence par des minuscules)
3. Préfixe tes variables par le type attendu : $sPageName veut dire que l'on attends un "string" dans cette variable $oPageName veut dire que l'on attends un "objet" etc
4. Utilise un préfixage différent pour :
Tes membres de classe : $m_aNomsAutorises
Tes paramètres de méthodes : $p_aNomsAutorises
5. Nomme tes constantes en MAJUSCULES : NOM_PAR_DEFAUT
6. Evite d'utiliser des chaines de caractères sorties de nulle part dans ta classe : $_GET['page'] => $_GET[self::PAGE_URL_PARAM] (où PAGE_URL_PARAM est un constante de ta classe)
7. Utilise la javadoc pour le commentaire de tes classe :
/**
* @desc Add a name to the authorized page list
* @param string $NomAutorise Page name to add
* @return void
*/
public function AjouterNomAutorise($NomAutorise)
8. Il faut faire 1 fichier par classe (et c'est tout!!!!)
9. Ordonner les classes dans des dossiers intelligents !
10. Les noms de classe commencent avec des majuscules
11. Les classes sont stockées dans des fichiers nommés comme ça : MaClasse.class.php
Voilà respecte ça déjà et tu feras du code bien propre et maintenable.
Si tu veux en savoir plus sur le sujet, essaye de faire un tour sur developpez.com, tu y trouveras des tutos bien fourni ![]()
Bonne soirée
Bonjour,
Pour commencer, que veux tu que nous corrigions ? Quelle est l'erreur qui t'es renvoyée ?
Ensuite pour ce qui est de la POO, tu as en fait réalisé ce qu'on appelle un contrôleur.
Maintenant il faut pas oublier que un des buts de la programmation orientée objet est de facilité l'évolution du code. Par exemple dans ton cas ca serait l'implémentation de l'url rewriting sans passer par un fichier .htaccess mais pas une BDD par exemple.
Au lieu de récupérer le tableau $_GET tu pourrais récupérer l'url complète et faire l'inclusion de la page demandée en te basant sur des règles que tu as défini dans une BDD. Ca permettrai d'optimiser le référencement de ton site sans tout péter dans ton code. Bien sûr pour réaliser cette archi il te faut un autre objet dont le travail sera d'interpréter les urls et de les générer en fonction des types de liens...
Tu pourrais aussi rajouter une gestion de droit facilement. Ce serait un autre objet qui travaillerait avec des objets qui représenteraient tes urls...
Autre but de la POO : La réutilisation du code.
Ta classe d'inclusion tu pourrais aussi bien la mettre sur un autre site, ça marcherait aussi.
Concrètement :
Est ce que c'était franchement utile de le faire comme ça ? -> Non
Est ce que c'était bien de le faire comme ça ? -> OUI !!!!
Il faut quitter cette habitude de coder en procédurale... L'objet c'est très très très très bien !!!
Hello,
Chercher par ces propres moyens, c'est bien et ça montre un esprit de curiosité important ![]()
Mais n'oublie pas que Google est ton ami et que ce sujet à été traité maintes fois sur différents forums
N'oublie pas de jeter un coup d'oeil de temps en temps sur ceux-ci pour éventuellement comprendre des mécanismes qui te semblent obscures ![]()
Hello,
Passer par une regexp pour faire ce genre de tâche peut poser de sérieux problèmes (Tu sais pas trop ce qu'il peut y avoir dans ton fichier XML au fil du temps, il est possible que ton MQCD soit changé pour autre chose...)
Renseigne plutôt sur la librairie SimpleXML native à PHP, il y a une petite fonction qui s'appelle : simplexml_load_file() qui te permet de transformer un fichier XML en objet et de le manipuler par la suite...
MOUHAHAHAHAHAHAHAAAAAAAAAAAAAAA
Exactement xTG ![]()
Est ce que tu pourrais re-poster ton code avec les petites modifications qu'on t'a déjà fais faire ?
Hello,
Moi j'ai quand même une question : D'où vient la variable $val ? [DTC Protect]
Parce que ca me parait bizarre de récupérer le contenu d'un tableau avec un tableau qui n'est pas un string :
Parce que sinon voilà ce qui se passe:
PHP essaye de résoudre la constante 'aFile', comme elle n'est pas définie il l'interprète la valeur numérique, soit '0'. Si $val n'est pas un tableau mais une chaine de caractère, il va te récupérer le premier caractère de la chaîne.
D'où la question : D'où viens la variable '$val' ![]()
Hello,
Je ne connais pas ton niveau de compétence en informatique, mais le sujet auquel tu t'attaque peut très vite devenir un vrai enfer (et je t'assure que je sais de quoi je parle)
La RFC concernant les envois de mail n'est pas respectée par tous les SMTPs (c'est un peu chacun le sien...)
Si tu veux vraiment le faire OK.
La bonne méthode est de t'envoyer un mail avec ce que tu veux dedans (ton html et ton image) et à partir de là, tu regarde le code reçu dans ton client mail.
Tu risque d'avoir pas mal de questions, n'hésite pas ![]()
Bon courage ![]()
Oui et plutot que d'utiliser des '1' et des '0' tu peux utiliser un type ENUM qui est prévu pour ça ![]()
Hello,
L'envoi de mail HTML en PHP est un sujet à part entière...
Donc je te recommande de te tourner vers la classe PHPMailer qui est un outil dédié à l'envoi de mail. Je trouve plus l'adresse du site, mais télécharge les sources il y a des exemples et sinon tu peux toujours venir demander un peu d'aide ici ![]()
Mais fais bien attention aux questions que tu poses, on est pas un help desk PHPMailer ![]()
Hello,
En programmation pour arriver à un même résultat il y a une infinité d'algorithmes possibles.
Les solutions dépendent des besoins essentiellement. Si tu n'as pas besoin de plus dans ton cas et que ça marche... Tant mieux.
Maintenant pose toi les questions suivantes :
1. Que se passe t il si je rajoute un dossier dans mon arborescence ?
2. Que se passe t il si je dois changer la place du fichier "config.inc.php" ?
Donc là tu vois que ta solution n'est pas vraiment évolutive.
En fonction de ton niveau de connaissance tu peux mettre en place des architecture plus ou moins complexe...
En tout cas ce que je peux te dire c'est que faire un ereg() pour ce que tu fais n'est pas nécessaire, tu pourrais utiliser un petit strpos(), ça ferait l'affaire ![]()
Hello,
de ce que je lis, tu n'as qu'à faire un teste sur la variable $f dans ton foreach() non ?!
euhhh
Je crois que tu as mal interprété ce que infograph61 a écrit. Il voulait bien dire que c'étais lui l'amateur et pas moi ![]()
Quant au disclaimer j'ai pensé à le mettre parce que la dernière fois y'en a un qui m'a envoyé un mail pour me dire que le script que je lui avais envoyé de ne marchait pas, et attention voilà l'erreur qu'il m'avait envoyé :
Unable to open stream '/home/toto/exemple.php' => véridique...
Hello,
Si je comprends bien tu veux créer un fichier dont le nom est le contenu de ta variable.
Et après tu fais un fichier CSV avec un séparateur ';'
Bon y a plus simple que ce que tu viens de faire ![]()
[DISCLAIMER]
Je n'ai pas testé le code posté plus haut, a priori il marche mais je ne l'ai pas mis dans le parser pour regarder si j'ai pas oublié un ';' ou si j'ai pas fait une faute de frappe sur le nom d'une variable...
[/DISCLAIMER]
Bon la tu te dis : "Il m'a dit que que c'était plus simple mais en définitive il a plus de ligne que moi..."
Alors pourquoi est ce que c'est plus simple ?
1. Prends ton problème par étape :
Tu fais beaucoup de chose en même temps, pas tellement que ça dérange PHP mais il faut que tu te place dans l'optique de qu'est ce qu'il va se passer quand tu vas revenir sur ton bout de code quelques temps après ? La mémoire humaine est une chose assez capricieuse et il n'est pas impossible que tu oublies ![]()
2. Gérer les erreurs :
La plupart des fonctions de gestion de fichier en PHP (ou d'autres langages hein ?!) renvoie des valeurs pour te permettre de vérifier que la création, la modification, la suppression de ton fichier s'est déroulée sans encombre. Il est important que tu testes ces valeurs de retour pour voir si tout s'est bien passé et en plus si tu as un problème par la suite il est quand plus facile de lire un message d'erreur plutot que de re-lire ton code pour essayer de deviner ce qu'il s'est passé...
3. Optimisation possible :
Actuellement ton script ouvre le fichier, ou il le créé pour chaque ligne que tu veux rajouter dans ton fichier. Ce n'est pas la bonne méthode. Les opérations sur les fichiers sont assez couteux en terme de ressource pour PHP, il faut que tu modifie ton code pour que tu ne l'ouvre qu'une fois, tu écris toutes les lignes qui le compose et tu le ferme à la fin. Avec mon script tu devrais pouvoir voir comment est ce que tu pourrais faire ce changement majeur dans ton code ![]()
Si tu as des questions, tu sais où est ce que je me trouve
[DTC Protection ON]
Hello,
Tout ça est très bien, je me permet cependant des petites remarques pour l'optimisation et dans l'idée d'apprentissage :
[MODE RELOU ON]
1. Faire des requêtes en boucle est assez onéreux en terme de ressources, surtout si tu fais une boucle pour chaque résultat et que tu as 7 requêtes. Il faudrait que tu commence à regarder ce qu'est une jointure ![]()
2. Il faut éviter de faire des "SELECT *" Déjà parce que du coup tu ramène des infos dont tu n'as pas forcément besoin et aussi parce que lorsque tu vas repasser sur ton code d'ici 3 semaines tu seras incapable de dire quels sont les champs qui composent ta table. Quitte à mettre tous les champs de ta table si tu as besoin dans ton SELECT, il vaut mieux perdre 2 petites minutes maintenant que de perdre 30min quand tu vas revenir sur ton code ![]()
[MODE RELOU OFF]
Voilà.