public function test_mixins() { phpx\register_macro('ecet_greet', 'ECET_GreetMacro'); parse_and_eval(dirname(__FILE__) . '/class_eval_test_class.phpx'); assert_equal(15, ExamplesClassEvalTestClass::add(10, 5)); $foo = new ExamplesClassEvalTestClass(); $foo->set_foo('hello world'); assert_equal('HELLO WORLD', $foo->get_foo()); assert_equal('Hello Jason', $foo->greet('Jason')); }
class AddressableMacro { public function addressable($class) { $class->attr_accessor('name'); $class->attr_accessor('address_1'); $class->attr_accessor('address_2'); $class->attr_accessor('city'); $class->attr_accessor('postcode'); $class->attr_accessor('country'); $class->mixin('AddressHelper'); } } // Force compiler to load for test purposes phpx\PHPX::init(); phpx\register_macro('addressable', 'AddressableMacro'); $customer = new Customer(); $customer->set_name('Joe Bloggs'); $customer->set_address_1('100 Puddle Lane'); $customer->set_city('Glasgow'); $customer->set_postcode('G1'); $customer->set_country('UK'); echo "Addressable fields exist and are set:\n"; var_dump($customer); echo "\nAddressHelper mixed in:\n"; var_dump($customer->is_domestic()); echo "\nSQL generated by static mixin:\n"; echo Customer::sql_for_find_by_id(10); echo "\n\nStatus setter is overwritten:\n"; $customer->set_status('active'); echo $customer->get_status();