Changes
Title
unchanged
Understanding Virtual Attributes and get/set methods
Category
unchanged
Tutorials
Yii version
unchanged
Tags
changed
Virtual Attributes;, __get; __set, understanding
Content
changed
[...]
Yii treats functions beginning with "get" as special, so let's make one to provide the full name in a single step:
```php
class Person extends CActiveRecord {
public function getFullName()
{
return $this->firstname . " " . $this->lastname;[...]
```php
// in a view somewhere
echo $form->dropDownList($model, 'personid',
CHtml::listData( Person::model()->findAll(), 'id', 'fullname' )
);
```
Now, the dropdown will show full user names in the dropdown, which makes for a better user experience. Attempting to provide a dropdown including firstname + lastname without a model helper function like this is more work and less useful.[...]
```
Note that Yii uses get/set functions **very** heavily internally, so when reviewing the class referne
nces, any function beginning with "set" or "get" can generally be used as an attribute.
>
Resolving Conflicts[...]
Please treat these methods as highly advanced, only to be used with good reason and careful consideration.
PHP Dynamic Attributes Don't Work
---------------------------------
More advanced PHP developers might wonder how Dynamic Attributes play into Yii, and the short answer is that they do not.
Dynamic Attributes allow an object variable to receive new attributes just by the using: saying `$object->foo = 1` automatically adds the attribute "foo" to the object without having to resort to `__get` or `__set`, and it's reported to be much faster.
But because of Yii's implementation of `__get/set`, these will not work because the low-level methods in `CComponent` throw an exception for an unknown attribute rather than let it fall through (which would enable dynamic attributes).
Some question the wisdom of blocking this, though others may well appreciate the safety it provides by insuring that a typo in an attribute name won't silently do the wrong thing rather than attempt to assign a close-but-not-quite attribute name to an object.
More info: [Dynamic Properties in PHP](http://krisjordan.com/dynamic-properties-in-php-with-stdclass)