class maClasse1
{
public $propriete;
function __construct()
{
$this->propriete = new maClasse2();
}
}
class maClasse2
{
public $autrePropriete;
function __construct()
{
$this->autrePropriete = 'toto';
}
}
$class = new maClasse1();
echo $class->propriete->autrePropriete; // Affiche toto
Je ne vois pas pourquoi les objets, ca prendrait beaucoup plus de place que les variables classiques...PHP n'est pas spécialement adapté pour créer puis traiter des myriades d'objets, et si tu essaies de traiter chaque bout d'information sous la forme d'objets je peux te garantir que tes pages vont être très très lentes. Si pour afficher une liste de 25 membres avec leur type tu es obligé de créer 50 objets tu vas rapidement te heurter à des problèmes de performance et d'utilisation de la mémoire.
<?php
set_time_limit(0);
error_reporting(E_ALL);
define('OS_SERVER', (preg_match('/^WIN/', PHP_OS)) ? 'windows' : 'unix');
function memory()
{
if (function_exists('memory_get_usage'))
{
return (memory_get_usage());
}
else if (OS_SERVER == 'windows')
{
$curent_pid = getmypid();
exec('tasklist /FO CSV', $out);
foreach ($out AS $line)
{
$split = explode(',', $line);
if (count($split) > 1)
{
list($cmd, $pid, $sess, $nb, $memory) = $split;
$pid = intval(substr($pid, 1, -1));
if ($pid == $curent_pid)
{
return (intval(preg_replace('#[^0-9]#', '', $memory)));
break;
}
}
}
}
return (NULL);
}
class Vaisseau
{
public $vie;
public $attaque;
public $pilote;
function __construct($vie, $attaque, $pilote)
{
$this->vie = $vie;
$this->attaque = $attaque;
$this->pilote = $pilote;
}
}
$vaisseau = array();
$begin = memory();
for ($i = 0; $i < 10000; $i++)
{
$vaisseau[] = array(
'vie' => 20,
'attaque' => 30,
'pilote' => 2,
);
}
$end = memory();
echo ($end - $begin) . ' pour le tableau<br />';
$begin = memory();
for ($i = 0; $i < 10000; $i++)
{
$vaisseau[] = new Vaisseau(20, 30, 2);
}
$end = memory();
echo ($end - $begin) . ' pour le l\'objet<br />';
?>
affiche
EDIT : Après benchmarck, le code avec objets met environ 20% de temps de génération en plus.5452 pour le tableau
6068 pour le l'objet
Ils prennent plus de place parce qu'ils nécessitent plus de place... C'est aussi simple que ça. Je ne connais pas les détails techniques de façon intime, mais si tu fais un tour du côté de n'importe quel article sur les performances [des objets] ou du côté des mailing list de PHP tu trouveras sûrement des infos à ce sujet.Je ne vois pas pourquoi les objets, ca prendrait beaucoup plus de place que les variables classiques...
...et puis vu qu'on va tous mourrir un jour ça sert à rien de vivre. Si ta page est lente, raison de plus de ne pas l'alourdir encore plus.De tte facon, si tu as une page un peu compliqué, qu'elle soit géré en objet ou via des fonctions, ca sera lent.
Très bien, j'aime bien les caches, merci d'avoir utiliser ce terme. Mais comment penses-tu implémenter un "cache" sur un jeu qui stocke 1000 objets pour représenter tes adversaires ? Cela ne règle pas non plus les impératifs d'utilisation de la mémoire.Si tu doit faire face a une forte charge, il n'y a qu'une seule solution, c'est d'utiliser des systèmes de caches.
Err... c'est un script que tu lances comment ? Quelle est l'interface de ce jeu, n'est-ce pas une page web ? Si c'est un script qui est exécuté à chaque action d'un joueur la problèmatique reste la même : beaucoup de création d'objets, beaucoup de destruction d'objets, etc... (faut bien libérer la mémoire en fin de script)Je précise que le moteur dont je parle n'est pas une page web. C'est un script que je lance, qui modifie la bdd. Je le lance lors du passage de tour et les utilisateurs ne l'utilise jamais. C'est donc un cas trés précis de traitement.