Я использовал метод __set magic с защищенными свойствами для отслеживания изменений, чтобы мои классы знали, есть ли у них что-то для сохранения. Есть ли способ контролировать свойство типа массива для изменений? Я понимаю, что обычно вы получаете доступ к массиву с помощью ссылки и такие функции, как array_push, не будут запускать метод __set, они будут использовать ссылку на массив.Обнаруживать изменения в массиве в PHP
То, что я хочу, в основном это:
class Skill{ public $Player, $Name, $Level;}
class Player {
protected $Name, /*Other properties*/, $Skills /*Array*/
}
Я тогда же отслеживание всех свойств в проигрывателе, чтобы сказать мне, если потребности инерционности обновляется. (Умение также будет иметь эту функцию, но это показывает основной пример). Кроме того, я хочу заставить их оставаться синхронизированными (это двунаправленная связь).
Есть ли способ сделать это, чтобы он мог вести себя как массив (не хотите проходить класс, чтобы синхронизировать их, если мне не нужно).
Это похоже на то, что я хочу. Я проверю его применимость позже. Не знал о ArrayObject. Это действительно здорово. Я должен был бы изменить больше, и это вызовет объект, просто изменив массив отслеживания и давая конструктору имя поля для синхронизации (включая удаление из массива). Короче говоря, это позволяет мне сделать простой класс, чтобы действовать как прокладка, которая составляет 98% того, что я искал. (Я надеялся на отсутствие класса вообще, выполните отслеживание в классе, в котором находится массив, но лучшим решением не всегда является тот, который соответствует вашему первоначальному шаблону). – lassombra
Рад, что это вам поможет, оно немного боком от вашей текущей реализации, но тот факт, что по определению он «ArrayObject реализует IteratorAggregate, ArrayAccess, Serializable, Countable» означает, что вы можете использовать объект как массив (http: //www.php. net/manual/en/class.arrayaccess.php) –
Обратите внимание, что PHP не рассматривает 'ArrayObject' (или' ArrayAccess' и т. д.) как массив. 'array_ *' методы не удастся, оператор '+' завершится неудачно и т. д. – Tgr