When you ask PHP for a property of an object, it will see if that property exists (and you have access to it, i.e. if it’s not protected or private) and if it doesn’t, it will call the function __get() on that object (if it exists).
Yii uses this __get() function to make getWhatever() functions in classes available as the property "whatever".
I don’t have the Yii source by hand, but it goes a little something like this:
class CComponent
{
function __get($property)
{
if (method_exists($this, 'get'.ucfirst($property))
{
return call_user_func(array($this, 'get'.ucfirst($property)));
}
// etc
}
}
so now if there is a function getSomething(), you can use ->something, getWhatever() for ->whatever, etc.
The same mechanism is in place for set (using __set()), so if you do ->whatever=10, it will call ->setWhatever($value)
As for the Issue::typeOptions not existing, that’s a bit of tricky one to explain. The short answer is that the property is not defined as a static property and can thus not be accessed staticly (i.e. using :: ) but only dynamically.
You should google about static functions in PHP to get a grasp of the difference between static and dynamic functions/properties. This is too involved a subject to explain in a forum post.