Under the hood, ‘Understand “blah” as a-kind when some-condition-or-other’ adds a routine to the I6 parse_name property of every instantiation of that kind (or class, in I6 terms) that causes the parser to recognise “blah” as a name for that object when the condition is true.
‘the item described’ is an I7 alias for the I6 variable ‘self’, which refers back to the specific instance of the object providing the property in question.
So, ‘Understand “here” as a thing when the item described is the holder of the player’ can be paraphrased as ‘attach a routine to every thing in the game, that recognises “here” as a name for that thing whenever that thing is the holder of the player’.
EDIT: this explains Zed’s observation that this style of Understand phrase must be attached to something solid- either a specific object or a kind- the compiler needs to know at compile-time exactly which object or objects’ parse_name properties to attach the routine to.
EDIT2: ‘Understand “here” as the holder of the player’ doesn’t work for 3 reasons. Firstly, Inform is looking for a description of a specific object or of a kind, which means the phrase has to be expressed in a slightly different way such as
Understand "here" as an object holding the player.
But Inform is also looking for something a bit more specific than an object- it wants a more specific kind that instances can inherit the parse_name property from. So:
Understand "here" as a thing holding the player
Understand "here" as a room holding the player
Which should work, but annoyingly falls foul of the bug (discussed elsewhere) whereby references to something vague rather than something specific holding something are interpreted by the compiler as meaning specifically carrying (and therefore applicable only to people), rather than the more usual 'carrying, or wearing, or containing, or supporting, or incorporating.* So we have to break it down further:
Understand "here" as a container containing the player
Understand "here" as a supporter supporting the player
Understand "here" as a room containing the player
(although 'thing' would also work in place of 'container' or 'supporter')
or
Understand "here" as a container which contains the player
Understand "here" as a supporter which supports the player
Understand "here" as a room which contains the player
*NB St John’s solution doesn’t fall foul of this bug for 2 reasons: firstly, because ‘the holder of <whatever>’ (which refers to a single (albeit variable) object) is not susceptible to it, whereas ‘the <vague whatever> holding <something>’ or ‘the <vague whatever> which holds <something>’ are; secondly, because ‘the item described’ also refers to a single (albeit variable) object - so ‘Understand “here” as a thing when the item described holds the player’ also works.
EDIT 3: You can also add adjectives to the kind, such as
Understand "here" as a lit room which contains the player.
Recall that Inform has to have a fixed object or kind to attach a parse_name routine to. An object’s location (e.g. co-located with the player or not) or properties (lit or unlit) may change during play, but not it’s fundamental being; similarly, a kind doesn’t change during play, nor the kind an object belongs to. So this ‘Understand…’ phrase will attach a parse_name routine to every room (not just those that happen to contain the player and be lit at the start of the game) but add conditions in the routine so that its logic only recognises “here” as a name for any specific room while that room is lit and contains the player.