Am 01.12.2014 17:37 schrieb "Rowan Collins" <rowan.coll...@gmail.com>:
>
> guilhermebla...@gmail.com wrote on 01/12/2014 15:27:
>
>> (1) Function/Namespaced function autoloading
>> (2) State encapsulation
>> (3) Function scoping

> I would add (4) static polymorphism, which Late Static Binding explicitly
supports.

Amen!

In several places in our codebase, I make use of per-request constants by
having an autoloaded baseclass file which uses class_alias for
specialization, like this:

// in some/class.inc
class some_class__base {
   ... common methods and default implementation
}
if (class_exists('some_class_'.SOME_CONSTANT)) {
     class_alias('some_class', 'some_class_'.SOME_CONSTANT);
} else {
     class_alias('some_class', 'some_class__base');
}

// in some/class/special.inc
class some_class_special extends some_class_base {
   .... specialization ...
}

Calling code simply uses some_class::foo() without caring whether the
concrete script run then uses the specialized class, or the base class.

> The only thing missing is a standardised, enforced, annotation on the
class to declare that you are using this ability and instances will never
be created.

I that regard, I'm quite happy with private function __construct, where
desired.

best regards
  Patrick

Reply via email to