Итак. Есть коллекция объектов из базы данных, выглядит так:
<?php
class Sites
{
// Коллекция объектов
public static $site = array();
private function __construct() {} // сделаем приватной, чтоб не создавался инстанс.
// функция добавления объекта в коллекцию
public static function add($id, $obj)
{
if ( is_object($obj) ) {
self::$site[$id] = $obj;
}
}
}
Добавим в коллекцию объект с данными о сайте.
<?php
$query = $db->prepare("SELECT * FROM `sites` WHERE site_id=:id");
$query->bindValue(':id', $id, PDO::PARAM_INT);
if ($query->execute()) {
$st = $query->fetch(PDO::FETCH_OBJ);
$id = (int) $st->site_id;
Sites::add($id, $st);
echo "<pre>";
var_dump(Sites::$site[$id]);
echo "</pre>";
/*object(stdClass)#4 (2) {
["site_id"]=>
string(2) "10"
["site_name"]=>
string(7) "Test123"
}*/
// меняем свойство и добавляем новое.
Sites::$site[$id]->site_name = "Name changed";
Sites::$site[$id]->addedProperty = "successful added";
// Сотрим.
echo "<pre>";
var_dump(Sites::$site[$id]);
echo "</pre>";
/*object(stdClass)#4 (3) {
["site_id"]=>
string(2) "10"
["site_name"]=>
string(12) "Name changed"
["addedProperty"]=>
string(16) "successful added"
}*/
// Создаем экземпляр объекта парсера
// пробуем изменить свойства статического объекта внутри другого объекта.
$parser = new StatsParser();
$parser->parseStats();
// Смотрим получилось ли изменить??
echo "<pre>";
var_dump(Sites::$site[$id]);
echo "</pre>";
/*object(stdClass)#4 (3) {
["site_id"]=>
string(2) "10"
["site_name"]=>
string(12) "Name changed"
["addedProperty"]=>
string(16) "successful added"
}*/
// Как видим, не получилось.
}
Упрощено класс парсера выглядит примерно так:
<?php
class StatsParser {
public function parseStats ()
{
if (! empty(Sites::$site)) {
foreach (Sites::$site as $st) {
$id = (int) $st->site_id;
// меняем свойство и пробуем добавить еще 1.
echo Sites::$site[$id]->site_name = "Test123"; // ничего не вывелось
echo Sites::$site[$id]->visited = 200; // ничего не вывелось
}
}
}
}