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. 21, 2014 at 08:44
    Former Australian Prime Minister Gough Whitlam, credited with transforming Australian society in the 1970s, has died at the age of 98.
    Read more»
  • Oct. 21, 2014 at 08:43
    Watch the latest news summary from BBC World News. International news updated 24 hours a day.
    Read more»
  • Oct. 21, 2014 at 08:39
    Rain and high winds are causing travel disruption, as the tail-end of Hurricane Gonzalo hits the UK.
    Read more»
  • Oct. 21, 2014 at 08:37
    Christophe de Margerie, chief executive of French oil company Total since 2007, has died after his plane crashed during take-off in Moscow.
    Read more»
  • Oct. 21, 2014 at 08:36
    Fierce fighting breaks out in the Syrian town of Kobane, ending two days of relative calm after defenders pushed back Islamic State militant...
    Read more»
  • Oct. 21, 2014 at 08:33
    Hong Kong officials are to meet student leaders for talks amid pro-democracy street protests that are now in their fourth week.
    Read more»
  • Oct. 21, 2014 at 08:05
    South African athlete Oscar Pistorius is due back in court in Pretoria to hear his sentence for killing girlfriend Reeva Steenkamp.
    Read more»
  • Oct. 21, 2014 at 07:35
    About 100 army medics are travelling to Sierra Leone as part of UK efforts to tackle the Ebola outbreak, as screening begins at Gatwick.
    Read more»
  • Oct. 21, 2014 at 06:49
    Religious women in India who want to wear make-up no longer have to struggle to find products that suit their faith.
    Read more»
  • Oct. 21, 2014 at 06:31
    A paralysed Polish man has been able to walk again after a pioneering therapy that involved transplanting specialist cells into his damaged ...
    Read more»
  • Oct. 21, 2014 at 06:20
    China's economy grows at its slowest pace since the global financial crisis, causing speculation the government may introduce more stimulus ...
    Read more»
  • Oct. 21, 2014 at 05:56
    US fashion designer Oscar de la Renta, who dressed former first ladies Jackie Kennedy and Hillary Clinton, has died aged 82, US media report...
    Read more»
  • Oct. 21, 2014 at 05:29
    An Australian man is convicted of performing a sex act in front of a webcam "watched by" a computer-generated child he believed was real.
    Read more»
  • Oct. 21, 2014 at 05:11
    Dominican-born US fashion designer Oscar de la Renta, who dressed former first ladies Jackie Kennedy and Hillary Clinton, has died aged 82, ...
    Read more»
  • Oct. 21, 2014 at 03:46
    Australian police abandon a war crimes investigation into the deaths in East Timor in 1975 of the "Balibo Five" journalists, citing insuffic...
    Read more»
  • Oct. 21, 2014 at 03:43
    A child is killed by violence every five minutes in the world, a leading charity says, calling for new targets to end all forms of child abu...
    Read more»
  • Oct. 21, 2014 at 03:21
    Scientists say they have identified the underlying reason why some people are prone to the winter blues, or seasonal affective disorder (SAD...
    Read more»
  • Oct. 21, 2014 at 02:55
    Vital supplies to tackle Ebola are beginning to arrive in Guinea, Liberia and Sierra Leone - the worst-hit countries, Ghana's president says...
    Read more»
  • Oct. 21, 2014 at 02:38
    A man who struck two Canadian soldiers with his car before he was shot dead by police had been "radicalised", Canada's PM says.
    Read more»
  • Oct. 21, 2014 at 02:22
    MPs are to debate whether voters should be able to deselect them using a "power of recall" if they commit wrongdoings.
    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: