Add a variable to a class instance at runtime: Difference between revisions
Content added Content deleted
m ({{omit from|GUISS}}) |
Thundergnat (talk | contribs) (→{{header|Perl 6}}: Add Perl 6 example) |
||
Line 394: | Line 394: | ||
# Set runtime variable (key => value). |
# Set runtime variable (key => value). |
||
$o->{'foo'} = 1;</lang> |
$o->{'foo'} = 1;</lang> |
||
=={{header|Perl 6}}== |
|||
You can add variables/methods to a class at runtime by composing in a role. The role only affects that instance, though it is inheritable. An object created from an existing object will inherit any roles composed in with values set to those at the time the role was created. If you want to keep changed values in the new object, clone it instead. |
|||
<lang perl6>class Bar { } # an empty class |
|||
my $object = Bar.new; # new instance |
|||
role a_role { # role to add a variable: foo, |
|||
has $.foo is rw = 2; # with an initial value of 2 |
|||
} |
|||
$object does a_role; # compose in the role |
|||
say $object.foo; # prints: 2 |
|||
$object.foo = 5; # change the variable |
|||
say $object.foo; # prints: 5 |
|||
my $ohno = Bar.new; # new Bar object |
|||
#say $ohno.foo; # runtime error, base Bar class doesn't have the variable foo |
|||
my $this = $object.new; # instantiate a new Bar derived from $object |
|||
say $this.foo; # prints: 2 - original role value |
|||
my $that = $object.clone; # instantiate a new Bar derived from $object copying any variables |
|||
say $that.foo; # 5 - value from the cloned object</lang> |
|||
=={{header|PHP}}== |
=={{header|PHP}}== |