aggregate

(PHP 4 >= 4.2.0)

aggregate — Dynamic class and object aggregation of methods and properties

Описание

void aggregate ( object $object , string $class_name )

Aggregates methods and properties defined in a class to an existing object. Methods and properties with names starting with an underscore character (_) are considered private to the aggregated class and are not used, constructors are also excluded from the aggregation procedure.

Список параметров

object

class_name

Возвращаемые значения

Эта функция не возвращает значения после выполнения.

Коментарии

YES you can use aggregation functions to simulate multiple inheritence.

function foo()
{
    aggregate($this, "bar");
    bar::bar();
}
2003-03-02 05:34:56
http://php5.kiev.ua/manual/ru/function.aggregate.html
Автор:
Note that even if this can be used to emulate multiple inheritance to some extent, an object in PHP can only be subclass of the class used in the class declaration and no other.

<?php

class {}
class 
{}

class 
extends A
{
  function 
C()
  {
   
aggregate($this'B'); // emulate multiple inheritance
 
}
}

$c = new C;
echo (int)
is_subclass_of($c'B');

/*
Output: 0
*/

?>
2005-01-07 14:16:19
http://php5.kiev.ua/manual/ru/function.aggregate.html
For PHP5 applications, the aggregate functionality available through classkit has been incorporated into and replaced by runkit. Per the classkit page of the PHP manual:

"Note:  This extension has been replaced by runkit, which is not limited to class manipulation but has function manipulation, as well."

  ref.runkit

Per the runkit page:

" This package is meant as a feature added replacement for the classkit package. When compiled with the --enable-runkit=classkit  option to ./configure, it will export classkit compatible function definitions and constants."
2005-09-12 00:22:34
http://php5.kiev.ua/manual/ru/function.aggregate.html
I had to fix someone else's php4 code to work under php5 that was b0rked due to aggregate not working, here's how I did it.

<?php
 
class shell { }

$classes = array("foo""bar""baz");

function 
php5aggregate($holdingClass$className)
{
 
// use php5 reflection to suss out the method names for the given class
  // http://uk.php.net/manual/en/language.oop5.reflection.php
 
$reflect = new ReflectionClass($className);
  foreach (
$reflect->getMethods() as $method)
  {
   
// copy the method to $holdingClass
    // function.runkit-method-copy
   
runkit_method_copy($holdingClass$method->getName(), $className);
  }
}

if (
version_compare(PHP_VERSION'5.0.0') === 1
{
 
/**
  * aggregate() does not exist in php5, so use our custom function
  * note, our custom aggregate function takes the holding class *name* 
  * which is instantiated afterwards, this is different to how the php4 function works
  */
 
foreach($classes as $value
  {
   
php5aggregate("shell",$value);
  }

 
$shell = new shell;
}
else
{
 
// php4
 
$shell = new shell;
  foreach(
$classes as $value
  {
   
aggregate($shell,$value);
  }
}
   
?>
2008-11-20 12:14:35
http://php5.kiev.ua/manual/ru/function.aggregate.html

    Поддержать сайт на родительском проекте КГБ