root/trunk/lib/SGL/Delegator.php

Revision 3124, 3.7 kB (checked in by demian, 3 weeks ago)

bugfix to trunk merge -2

  • Property svn:eol-style set to native
Line 
1 <?php
2 /* Reminder: always indent with 4 spaces (no tabs). */
3 // +---------------------------------------------------------------------------+
4 // | Copyright (c) 2006, Demian Turner                                         |
5 // | All rights reserved.                                                      |
6 // |                                                                           |
7 // | Redistribution and use in source and binary forms, with or without        |
8 // | modification, are permitted provided that the following conditions        |
9 // | are met:                                                                  |
10 // |                                                                           |
11 // | o Redistributions of source code must retain the above copyright          |
12 // |   notice, this list of conditions and the following disclaimer.           |
13 // | o Redistributions in binary form must reproduce the above copyright       |
14 // |   notice, this list of conditions and the following disclaimer in the     |
15 // |   documentation and/or other materials provided with the distribution.    |
16 // | o The names of the authors may not be used to endorse or promote          |
17 // |   products derived from this software without specific prior written      |
18 // |   permission.                                                             |
19 // |                                                                           |
20 // | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS       |
21 // | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT         |
22 // | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR     |
23 // | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT      |
24 // | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,     |
25 // | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT          |
26 // | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,     |
27 // | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY     |
28 // | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT       |
29 // | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE     |
30 // | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.      |
31 // |                                                                           |
32 // +---------------------------------------------------------------------------+
33 // | Seagull 0.6                                                               |
34 // +---------------------------------------------------------------------------+
35 // | Delegator.php                                                             |
36 // +---------------------------------------------------------------------------+
37 // | Authors:  Sebastian Bergmann <sb@sebastian-bergmann.de>                   |
38 // |           Demian Turner <demian@phpkitchen.com>                           |
39 // +---------------------------------------------------------------------------+
40
41 /**
42  * PHP 4/5 compatible class for aggregating objects.
43  *
44  */
45 class SGL_Delegator
46 {
47     var $aDelegates = array();
48
49     function __call($methodName, $parameters)
50     {
51         foreach ($this->aDelegates as $delegate) {
52             if (is_callable(array($delegate, $methodName))) {
53                 return call_user_func_array(
54                     array($delegate, $methodName), $parameters);
55             }
56         }
57     }
58
59     function add($delegate)
60     {
61         if (!SGL::isPhp5()) {
62             aggregate_methods($this, get_class($delegate));
63             SGL::objectCopy($delegate, $this); // aggregate_properties(); ignore private vars
64         }
65         $this->aDelegates[] = $delegate;
66     }
67 }
68 ?>
Note: See TracBrowser for help on using the browser.