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

  • Sep. 19, 2014 at 19:49
    Actors, athletes and musicians join the White House in a public drive to prevent sexual assault on US university campuses.
    Read more»
  • Sep. 19, 2014 at 19:47
    Alex Salmond is to step down as first minister of Scotland and Scottish National Party leader after voters rejected independence in Thursday...
    Read more»
  • Sep. 19, 2014 at 19:36
    The Queen says she believes Scotland will unite in a "spirit of mutual respect and support" following the independence referendum.
    Read more»
  • Sep. 19, 2014 at 19:21
    Joyce Thacker, the director for children's services at Rotherham council, resigns in the wake of the abuse report scandal.
    Read more»
  • Sep. 19, 2014 at 19:14
    An Egyptian man accused of helping to plan the 1998 bombings of US embassies in Kenya and Tanzania pleads guilty in a New York court.
    Read more»
  • Sep. 19, 2014 at 19:07
    A Muslim academic opens a gay-friendly mosque in South Africa, despite receiving death threats and criticism from parts of the Muslim commun...
    Read more»
  • Sep. 19, 2014 at 18:58
    A three-day curfew is underway in Sierra Leone to enable health workers to find and isolate cases of Ebola, but critics warn it will achieve...
    Read more»
  • Sep. 19, 2014 at 18:51
    Alibaba's shares open significantly above their initial price on the New York Stock Exchange on Friday, a sign of the excitement surrounding...
    Read more»
  • Sep. 19, 2014 at 18:34
    Restructuring at the Phones 4U head office is resulting in 628 redundancies, but 887 jobs in stores will be preserved.
    Read more»
  • Sep. 19, 2014 at 18:29
    The life and times of Scotland's independence leader
    Read more»
  • Sep. 19, 2014 at 18:06
    Police recover the mountain bike ridden by a convicted murderer who is wanted in connection with the disappearance of 14-year-old schoolgirl...
    Read more»
  • Sep. 19, 2014 at 18:05
    Shares rise in London after Scotland rejects independence, as a rally in the pound fades.
    Read more»
  • Sep. 19, 2014 at 17:47
    French ex-President Nicolas Sarkozy returns to politics, announcing on his Facebook page that he will seek the leadership of main centre-rig...
    Read more»
  • Sep. 19, 2014 at 17:32
    Ukraine announces it will not take part in the 2015 Eurovision Song Contest due to financial constraints.
    Read more»
  • Sep. 19, 2014 at 17:29
    Lewis Hamilton sets the pace in second practice at the Singapore Grand Prix as title rival Nico Rosberg is 13th fastest.
    Read more»
  • Sep. 19, 2014 at 17:00
    French fighter jets have launched their first air strikes against Islamic State in northern Iraq as Kurds in northern Syria flee attacks by ...
    Read more»
  • Sep. 19, 2014 at 16:38
    A dangerous flaw that has exposed eBay customers to malicious websites has been affecting the site since at least February, the BBC has foun...
    Read more»
  • Sep. 19, 2014 at 16:30
    President Hollande says France has carried out its first air strikes against IS militants in Iraq, joining the US in military action against...
    Read more»
  • Sep. 19, 2014 at 16:19
    The best news photos from around the world
    Read more»
  • Sep. 19, 2014 at 16:06
    Wembley will host the final and semi-finals of Euro 2020, while Hampden Park is also awarded games but Cardiff misses out.
    Read more»

Recent Comments:

Pharmd10

Sep. 19, 2014 at 07:03 PM

Very nice site!

Pharmc274

Sep. 19, 2014 at 07:01 PM

Very nice site! [url=http://opxyiea2.com/yoyaqqo/2.html]cheap goods[/url]

Pharmd689

Sep. 18, 2014 at 12:36 PM

Very nice site! [url=http://oixypea2.com/qxqsxxq/2.html]cheap goods[/url]

Pharma24

Sep. 18, 2014 at 12:35 PM

Very nice site! cheap goods

Johnk894

Sep. 17, 2014 at 07:40 PM

Appreciate it for helping out, great information. ekfkbekeceac

Archives:

Meet me on facebook: