Dzięki za odpowiedz.
Jeszcze są dwie linijki kodu w index.php
session_start();
if (!isset($_SESSION['map'])) {
$map = new map(4, 4);
$map->setHero(new Hero(2,1));
} else {
echo 'unserialize MAP<br>';
$map = unserialize($_SESSION['map']);
}
if (!empty($_GET['move'])) {
$map->moveHero($_GET['move']);
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="Stylesheet" type="text/css" href="style.css" />
<title>Plansza gry</title>
</head>
<body>
<div id="kontener">
<div id="map"><?=$map->paint(); ?></div>
<div id="control"><?=control::paint(); ?></div>
</div>
<div><?php Komunikaty::getKomunikaty();?></div>
</body>
</html>
<?php
if (!isset($_SESSION['map'])) { }
Na twoje rozwiązanie także wpadłem i zrobiłem sobie taką funkcję __sleep
public function __sleep() {
for ($x = 1; $x <= $this->width; $x++) {
for ($y = $this->height; $y >= 1; $y--) {
$_SESSION['maps'][$y][$x] = serialize($this->map[$y][$x]); }
}
return array('width', 'height', 'map', 'hero'); }
Myślałem jednak, że istnieje jakiś ładniejszy sposób serializacji obiektów kontenerowych.
Dla potomnych może jeszcze podam jak budzę obiekt do życia pozostawiając oryginalne nazewnictwo:
public function __wakeup() {
for ($x = 1; $x <= $this->width; $x++) {
for ($y = $this->height; $y >= 1; $y--) {
$this->map[$y][$x] = unserialize($_SESSION['maps'][$y][$x]); }
}
}
Udało mi się w końcu upchnąć obiekt w sesji

Najwięcej czasu zajęło mi osiągnięcie tego efektu:
[map] => O:3:"map":4:{s:10:"�map�width";i:4;s:11:"�map�height";i:4;s:8:"�map�map";N;s:9:"�map�hero";N;}
Serializacjia przy pierwszym odpaleniu strony jest idealna, wszystkie obiekty wewnętrzne są w sesji i po deserializacji się odtwarzają, więc można powiedzieć, że osiągnąłem jakiś sukces. Ale po wykonaniu działań i przeładowaniu strony pojawia się problem, którym już nie wiem jak sobie poradzić. Mianowicie przy drugiej serializacji do zmiennej $_SESSION ładuje mi się coś takiego:
[map] => map Object
(
[hero:private] => Hero Object
(
[actionPoint:private] => 29
[posX:private] => 2
[posY:private] => 2
)
[width:private] => 4
[height:private] => 4
[map:private] => Array
(
[4] => Array
(
[1] => field Object
(
[picPath:private] => flor2.png
[content:private] =>
)
...
czyli obiekty hero i map nie zostały zniszczone i przekazane do serializacji jako obiekty anie NULL, co powoduje błąd przy deserializacji
Warning: unserialize() expects parameter 1 to be string, object given in D:\WebServ\httpd-users\pole_gry\index.php on line 8