Проблема в том, что хотя
$options['categories']
является действительным
$options['categories']['all']
нет.
Изменение вашей линии на
$all_categories = isset($options['categories']) &&
isset($options['categories']['all']) &&
$options['categories']['all'] ? true : false;
Подавит вашу ошибку и вернет FALSE. (перевод строки добавлен только для ясности и может быть удален)
Лучший способ состоит в том, чтобы использовать flash.utils.getQualifiedClassName()
. Кроме того, можно использовать flash.utils.describeType()
для получения XML-документа описывание больше о классе.
Actionscript 3 имеет is оператор, который можно использовать для сравнения объектов. Рассмотрим следующий код:
var mySprite:Sprite = new Sprite();
var myMovie:MovieClip = new MovieClip();
trace(mySprite is Sprite);
trace(myMovie is MovieClip);
trace(mySprite is MovieClip);
trace(myMovie is Sprite);
, который выдаст следующий вывод:
true
true
false
false
Это будет работать для встроенных классов и классов, которые вы создаете сами. Экземпляр ActionScript 2, эквивалентный , является оператором , это instanceof .
Вы захотите использовать Object.prototype.constructor.
От документация :
dynamic class A {}
trace(A.prototype.constructor); // [class A]
trace(A.prototype.constructor == A); // true
var myA:A = new A();
trace(myA.constructor == A); // true
(Удобно, это также, как проверить типы в JavaScript, который является тем, что первоначально привело меня к этому в документах)
Так, для проверения этого, прежде чем я отправил здесь я попробовал его в приложении, которое я имею в классе под названием Плеер. Так как свойство прототипа статично, Вы не можете назвать его с помощью "этого", но можно просто пропустить идентификатор объема, и оно работает:
public function checkType():void {
trace(prototype.constructor, prototype.constructor == Player);
// shows [class Player] true
}
Если Вы хотите объяснить наследование, то Вы могли бы хотеть попробовать что-то вроде этого:
if (objectA is objectB.constructor || objectB is objectA.constructor)
{
// ObjectA inherits from ObjectB or vice versa
}
Object obj = new Object();
Object o = new Object();
if(o.getClass().getName().endsWith(obj.getClass().getName())){
return true;
}else{
return false;
}
В более общем плане, если вы хотите проверить, является ли objectA подтипом objectB
import flash.utils.getDefinitionByName;
import flash.utils.getQualifiedClassName;
...
if (objectA is getDefinitionByName(getQualifiedClassName(objectB)))
{
...
}