Aggregating objects within PHP5

by , Jun. 26, 2010 at 12:19 PM

Scripts: PHP, MySQL

If you did not know, it is worth to know  that from PHP5 the full (OOP) Object Oriented programming paradigm is totally integrated.

In this article, i am going talk about one of the technics of OOP with PHP. If you do not have any notion in Object oriented programming, in any programming languages like Java, C++, C#, Ruby, ...
i will advise to first learn OOP paradigm or find some introduction to Object oriented programming  on the internet. You may purchase some book on this matter, if you want.
When you go OOP programming, you will in one or other way interact with some objects. Thus aggregation of object refers to a situation where one or more objects( the Aggregated objects ) are passed to another object( the Aggregating object ) to perform some operations or methods within that object that called it.

The aggregating object instatiates or creates an object of the aggregated class in its constructor method. To be able for the aggregating object calling methods or public properties of the aggragated objects, the PHP5 magic method (__call) come in handful. Within this __call method, another PHP function (call_user_func_array) comes in handy for matching the aggregated object to its called method.

May be it is not easy to figure out how it is all about. But in the classes defined here underneath, you can get it. You can also check the demonstration of this code

 

  1. <?php
  2. /**
  3.  * Description of Product
  4.  *
  5.  * @author Emmanuel
  6.  */
  7. class Product
  8. {
  9. private $name = null;
  10. private $price = null;
  11.  
  12. public function setProdName($name=null){
  13. $this->name = ucfirst($name);
  14. }
  15. public function getProdName(){
  16. if(isset($this->name)) return $this->name;
  17. else return null;
  18. }
  19. public function setProdPrice($price = null){
  20. if(isset($price))$this->price = $price;
  21. }
  22. public function getProdPrice(){
  23. if(isset($this->price)) return $this->price;
  24. }
  25. }
  26.  
  27. /**
  28.  * Description of Buyer of the product
  29.  *
  30.  */
  31. class Buyer{
  32. private $name = null;
  33.  
  34. public function setBuyername($name){
  35. if(isset($name)) $this->name = $name;
  36. }
  37. public function getBuyerName(){
  38. if(isset($this->name)) return $this->name;
  39. }
  40. }
  41.  
  42. /**
  43.  * Description of ProductCategory
  44.  *
  45.  */
  46. class Manufacturer
  47. {
  48. private $name = null;
  49. protected $product;
  50. protected $buyer;
  51.  
  52. public function __construct(){
  53. $this->product = new Product;
  54. $this->buyer = new Buyer;
  55. }
  56.  
  57. //
  58. public function setName($name){
  59. if(isset($name)){
  60. $this->name = $name;
  61. }
  62. }
  63.  
  64. //
  65. public function getName(){
  66. return $this->name ;
  67. }
  68.  
  69. public function __call($method, $arguments){
  70. if(method_exists($this->product, $method)){
  71. array($this->product, $method),
  72. $arguments
  73. );
  74. }
  75. //
  76. if(method_exists($this->buyer, $method)){
  77. array($this->buyer, $method),
  78. $arguments
  79. );
  80. }
  81. }
  82. }
  83.  
  84. $factory = new Manufacturer();
  85. $factory->setName("FACTORY_1");
  86. //Call methods from aggregated Product object
  87. $factory->setProdName("PRODUCT_1");
  88. $factory->setProdPrice("&euro;150,-");
  89. //Call methods from aggregated Buyer object
  90. $factory->setBuyerName("Emmanuel Manu");
  91.  
  92. echo "Manufacturer's name : ".$factory->getName()."<br/>";
  93. echo "Product's name : ".$factory->getProdName()."<br/>";
  94. echo "Product's price : ".$factory->getProdPrice()."<br/>";
  95. echo "Buyer : ".$factory->getBuyerName()."<br/>";
  96. ?>

 

If you would want to see the code of the classes above in action, go to this link for demonstration. The echo's in the code will print up the name of the factory, product's name and its price, the  name of the buyer

DEMONSTRATION>>

If we talk about performance issues, the advantages of aggregating objects within other objects mainly come from its lower overload, since most of the time only one object is shared by other objects. However, this advantage might be discarded in the case of having a class for database connection shared by other multiple classes. You may run into difficulties if multiple database connections are established to the same server, causing a noticeable detriment to the system, particularly if your site is attracting many visitors.

Of course it is not a good idea to design your DB object with Objects Aggregation, instead the Singleton Pattern may be in this case, providing one and only existing object for DB, very useful. This is to avoid creating new instances of a DB class with key (new) and end up with overheading the system beacause every instantiated object is kept in the memory of the system.

Patterns in PHP is also very important to effectively and efficiently design not only webapplications but also any soft. applications. Patterns topics will come in the latter articles.

Available Comments :

Your Attention! Please do not post message with spam on this blog. We try to be cool to each other and post relevant comments and relating to the appropriated topic or entry. Let's try to get a nice conversation over here.

Leave a comment

Required!
Required!

Required!
Required!

Latest News

  • Oct. 31, 2014 at 14:49
    Burkina Faso's President Blaise Compaore announces he has resigned, following violent protests at his attempt to extend his 27-year rule.
    Read more»
  • Oct. 31, 2014 at 14:44
    Victims' groups are meeting officials from a historical child sex abuse inquiry and are expected to call for inquiry chair Fiona Woolf to re...
    Read more»
  • Oct. 31, 2014 at 14:31
    UN chief Ban Ki-moon says discrimination against humanitarian workers who return home from the Ebola crisis in West Africa is "unacceptable"...
    Read more»
  • Oct. 31, 2014 at 14:30
    Chelsea boss Jose Mourinho confirms striker Diego Costa will be available for Saturday's Premier League game with QPR.
    Read more»
  • Oct. 31, 2014 at 14:28
    This year's Halloween is the warmest on record in the UK, with temperatures reaching as high as 23.5C, breaking the previous record of 20C.
    Read more»
  • Oct. 31, 2014 at 14:26
    Police in India say they have arrested three people who they suspect robbed a bank by digging a 125-foot (40-metre) tunnel straight into the...
    Read more»
  • Oct. 31, 2014 at 14:09
    A man arrested over "a sick joke" about Ebola on a Dublin-bound plane is ordered to pay 2,500 euros (£1,963) to charity to avoid a criminal...
    Read more»
  • Oct. 31, 2014 at 14:08
    A major fire forces the evacuation of the French national radio building in Paris but there are no immediate reports of casualties.
    Read more»
  • Oct. 31, 2014 at 13:59
    Anti-corruption investigators in China reportedly find the equivalent of $33m in cash at an official's home - the biggest such haul to date....
    Read more»
  • Oct. 31, 2014 at 13:57
    Hungary shelves a proposed tax on internet data traffic after tens of thousands of Hungarians marched against it.
    Read more»
  • Oct. 31, 2014 at 13:41
    The metal detectorists who are saving marriages
    Read more»
  • Oct. 31, 2014 at 13:41
    Two people are missing and a man has been arrested after a major blaze at a Stafford fireworks warehouse that left two people in hospital.
    Read more»
  • Oct. 31, 2014 at 13:23
    A breeder in China's Chendgu province was trying to give these two baby pandas medicine instead of their usual bamboo leaves- and they were ...
    Read more»
  • Oct. 31, 2014 at 13:22
    A team has developed micro-sized rockets, powered by seawater, that can neutralise chemical and biological weapons.
    Read more»
  • Oct. 31, 2014 at 13:16
    Inflation in the eurozone rose slightly in October, giving some hope that the spectre of deflation can be staved off.
    Read more»
  • Oct. 31, 2014 at 13:00
    A police chief will face an internal charge of gross misconduct after an allegation of inappropriate behaviour towards women.
    Read more»
  • Oct. 31, 2014 at 12:57
    At least eight people die in an explosion at a major bus station in Gombe state in north-eastern Nigeria, witnesses tell the BBC.
    Read more»
  • Oct. 31, 2014 at 12:32
    Russia's central bank raises interest rates to 9.5% from 8%, a much bigger rise than expected, as it seeks to combat inflation.
    Read more»
  • Oct. 31, 2014 at 12:30
    Software firm Drupal warns millions to "assume" they have been hacked if they have not applied a patch for a recently discovered bug.
    Read more»
  • Oct. 31, 2014 at 12:29
    Scores of bodies of Sunni Muslim tribesmen apparently killed by Islamic State militants are found in mass graves in western Iraq.
    Read more»

Recent Comments:

Pharmb740

Sep. 25, 2014 at 11:59 AM

Very nice site!

Pharmf503

Sep. 25, 2014 at 06:32 AM

Very nice site! cheap goods http://apeyixo2.com/ysyaqqs/4.html

Pharmf80

Sep. 23, 2014 at 06:22 PM

Very nice site!

Pharmf581

Sep. 23, 2014 at 06:22 PM

Very nice site! cheap goods http://aieopxy2.com/osovrrv/4.html

Pharmg443

Sep. 23, 2014 at 06:21 PM

Very nice site! cheap goods

Archives:

Meet me on facebook: