Конструктор для объектов может содержать неявный вызов инициализации. Например при передаче в конструктор id или имени сайта по нему загружается из базы все данные, однако обычно это делают через отдельный метод инициализации, который в конструкторе вызывают. если никаких параметров не передается - создается пустой(новй) объект.
По поводу сессии - если в объекте нет ссылок на внешние ресурсы(например на DB), то serialize() работает, храните как строку, потом unserialize() для чтения из сессии.
У вас в коде все же как-то все кривовато,
1) прям в объекте сайта создается подключение к бд и фигачатся запросы,
2) Названия классов пишутся с большой буквы
3) тут же вывод каких то обработок... Вообще как будто не ооп а попытка писать объекты процедурным стилем.
// конструктор объекта
function __construct($id = ""){
if($id==="") {do some}// создаем пустой объект
else{ $this->initById($id);}
}
// в коде где создаем новый сайт
$site = new Site();
$site->add($dataset); // передаем параметры, можно отдельно каждый, можно заранее созданным массивом.