From [1]:

   Objective-C permits a class to wholly replace another class within a
   program. The replacing class is said to "pose as" the target class.
   All messages sent to the target class are then instead received by
   the posing class.

   There are several restrictions on which classes can pose:

     * A class may only pose as one of its direct or indirect
       superclasses.

     [The other restrictions do not apply to PHP]

 Earlier this year, Johannes implemented class posing for PHP as follows:

   <?php
   class Foo {}
   class Bar extends Foo {}

   function new_overload($className)
   {
       if ($className == 'Foo') {
           return new Bar;
       }

       // ...
   }

   $o = new Foo;
   // $o is an object of Foo.

   register_new_overload('new_overload');

   $o = new Foo;
   // $o is an object of Bar.
   ?>

 We (Johannes, Marcus, Sara, and myself) then discussed where to put this
 functionality. Outside of core, there were two places that both make
 sense: pecl/operator and pecl/runkit.

 However, to make this a viable mechanism that can be used in tools such
 as PHPUnit (for which I could really use this functionality), we agreed
 that it actually belongs into the core.

 Opinions? Needless to say that I would love to see this in PHP 5.3 ;-)

 --
 [1] http://en.wikipedia.org/wiki/Objective_C#Posing

-- 
Sebastian Bergmann                          http://sebastian-bergmann.de/
GnuPG Key: 0xB85B5D69 / 27A7 2B14 09E4 98CD 6277 0E5B 6867 C514 B85B 5D69

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to