$this
- специальная переменная в PHP , которая не может быть назначена. Если он доступен в контексте, где он не существует, эта фатальная ошибка указывается.
Эта ошибка может возникнуть:
class Foo {
protected $var;
public function __construct($var) {
$this->var = $var;
}
public static function bar () {
// ^^^^^^
echo $this->var;
// ^^^^^
}
}
Foo::bar();
Как исправить: снова просмотрите свой код, $this
может использоваться только в контексте объекта и никогда не должен использоваться в статическом методе. Кроме того, статический метод не должен обращаться к нестатистическому свойству. Используйте self::$static_property
для доступа к статическому свойству. $this
переменная. Как исправить: Просмотрите код и замените $this
на другую переменную замещения. Вопросы, относящиеся:
Решение наличия связанного NSMutableArray ключей не так плохо. Это старается не разделять NSDictionary на подклассы, и если Вы осторожны с записью средств доступа, не должно быть слишком трудно сохранить синхронизируемым.
Если Вы собираетесь разделить NSDictionary на подклассы, необходимо реализовать эти методы как минимум:
-count
-objectForKey:
-keyEnumerator
-removeObjectForKey:
-setObject:forKey:
-copyWithZone:
-encodeWithCoder:
-initWithCoder:
-countByEnumeratingWithState:objects:count:
самый легкий способ сделать, что Вы хотите, состоит в том, чтобы сделать подкласс NSMutableDictionary, который содержит собственный NSMutableDictionary it, которым это управляет и NSMutableArray для хранения упорядоченного множества ключей.
, Если Вы никогда не собираетесь кодировать свои объекты, Вы могли мыслимый пропуск, реализовывая -encodeWithCoder:
и -initWithCoder:
, Все Ваши реализации метода в этих 10 методах выше тогда или пойдут непосредственно через Ваш размещенный словарь или Ваш заказанный ключевой массив.
Быстро и грязно:
Если вам нужно заказать свой словарь (в данном случае «myDict»), сделайте следующее:
NSArray *ordering = [NSArray arrayWithObjects: @"Thing",@"OtherThing",@"Last Thing",nil];
Затем, когда вам нужно заказать свой словарь, создайте индекс:
NSEnumerator *sectEnum = [ordering objectEnumerator];
NSMutableArray *index = [[NSMutableArray alloc] init];
id sKey;
while((sKey = [sectEnum nextObject])) {
if ([myDict objectForKey:sKey] != nil ) {
[index addObject:sKey];
}
}
Теперь объект индекса * будет содержать соответствующие ключи в правильном порядке. Обратите внимание, что это решение не требует наличия всех ключей, что является обычной ситуацией, с которой мы имеем дело ...