16-06-2009, 11:55 AM
Ah oui j'ai parlé de la mémoire en PHP et j'ai pas donnée d'exemple :
Résultat garanti : Allowed memory size of *** bytes exhausted Code PHP :
<?php
class Mari {
public $femme = null;
}
class Femme {
public $mari = null;
}
while (true) {
// Création de deux objets
$femme = new Femme();
$mari = new Mari();
// Oh, un couple :)
$femme->mari = $mari;
$mari->femme = $femme;
// Suppression des deux objets : la mémoire devrait être vidée
unset($femme);
unset($mari);
}
C'est beau la gestion des références croisées... Il faudrait ajouter unset($femme->mari, $mari->femme); avant les deux autres unset pour réellement libérer la mémoire (et ne pas avoir cette fatal error mais une vraie boucle infinie sans memory leak).
Seulement on ne peut pas toujours le faire si la librairie qu'on utilise ne l'a pas prévu et utilise massivement les références croisées (ce qui arrive trèèèèèès souvent).
Dans des jeux il peut arriver, par exemple lors de la génération de rapport, qu'il faille manipuler beaucoup d'objets, et c'est très décourageant quand on se rend compte qu'il y a un manque de mémoire et qu'on ne pourra rien faire pour y remédier à part patcher des librairies lointaines.
D'autant plus que certaines ne sont pas patchables et pourtant touchées par le problème : cas des librairies internes SoapClient, DOMDocument & DOMNode, etc...
C'est tout de même pour donner un *vrai* argument anti-PHP qui justifie que non, ce n'est pas forcément le langage obligatoire et qu'il peut même être obligatoire de passer à autre chose.
Cela dit tant qu'on n'a pas ce problème (et qu'on n'est pas allergique à l'incohérence de l'API de base genre lol les conventions de nommages entre is_null, isset, et empty...), PHP reste un excellent langage à tous les autres niveaux pour moi.