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

  • Jan. 30, 2015 at 11:43
    Russia contests claims its planes caused "disruption to civil aviation" in the UK, saying the patrols were "routine" and met "international ...
    Read more»
  • Jan. 30, 2015 at 11:42
    Watch the latest news summary from BBC World News. International news updated 24 hours a day.
    Read more»
  • Jan. 30, 2015 at 11:36
    Eurozone deflation increases over the last month from -0.2% to -0.6% as lower oil prices push down costs.
    Read more»
  • Jan. 30, 2015 at 11:31
    The former Yugoslavia war crimes tribunal is set to rule on the appeals of five men over their convictions over the 1995 Srebrenica massacre...
    Read more»
  • Jan. 30, 2015 at 11:25
    Chelsea are close to finalising a £23.3m deal to sign Fiorentina's 26-year-old Colombian winger Juan Cuadrado.
    Read more»
  • Jan. 30, 2015 at 11:24
    Two pilots have surpassed the world distance record for a flight in a helium balloon after crossing the Pacific Ocean.
    Read more»
  • Jan. 30, 2015 at 11:22
    A bomb blast at a Shia religious mosque in southern Pakistan has killed at least 20 people and injured many more, officials say.
    Read more»
  • Jan. 30, 2015 at 11:22
    South African apartheid-era death squad commander Eugene de Kock, nicknamed "Prime Evil", is granted parole after 20 years for killing activ...
    Read more»
  • Jan. 30, 2015 at 11:19
    A series of events in London marking the 50th anniversary of the state funeral of Sir Winston Churchill are under way.
    Read more»
  • Jan. 30, 2015 at 11:11
    Harry Potter actor Robbie Coltrane is admitted to hospital in Florida with flu-like symptoms after falling ill during a flight from London.
    Read more»
  • Jan. 30, 2015 at 10:35
    Dozens of skeletons and decayed body parts are discovered in sacks in a disused room of an Indian police building, baffling the authorities....
    Read more»
  • Jan. 30, 2015 at 10:20
    Yousra El Gendy is far from being the typical glamorous Egyptian singer musing about Prince Charming and performing the occasional belly dan...
    Read more»
  • Jan. 30, 2015 at 10:02
    Men have seen the real value of their pay fall far more than women in the past few years, according to the Institute for Fiscal Studies.
    Read more»
  • Jan. 30, 2015 at 09:47
    Petrol stations around the world
    Read more»
  • Jan. 30, 2015 at 09:26
    At least 26 people, mostly soldiers, are killed in a series of attacks by Islamist militants in Egypt's Sinai peninsula.
    Read more»
  • Jan. 30, 2015 at 09:14
    Japanese carmaker Honda cuts its profit forecast and sees third quarter earnings drop sharply following a vehicle recall linked to airbags.
    Read more»
  • Jan. 30, 2015 at 08:51
    Police are looking for Death Row Records founder Marion "Suge" Knight after a man was run over and killed in Los Angeles.
    Read more»
  • Jan. 30, 2015 at 08:39
    Pop star Taylor Swift has trademarked phrases including "this sick beat" and "we never go out of style", in the United States to prevent una...
    Read more»
  • Jan. 30, 2015 at 08:33
    Mancini wants Toure, Chelsea close in on Cuadrado, Anderson could leave Man Utd, Spurs plan Everton exchange, plus more.
    Read more»
  • Jan. 30, 2015 at 08:26
    The Philippines holds a day of mourning for 44 police commandos killed in a clash with Muslim rebels, as police sought terror suspects.
    Read more»

Recent Comments:

Emmanuel Ndayiragije

May. 05, 2011 at 04:30 PM

Salut Joannes,
Quand j'ai programmé ce système, je l'ai codé supportant l'englais seulement. Bientôt, je vais l'étendre pour pouvoir supporte... Read more»

Joannes

Apr. 27, 2011 at 02:16 PM

Why don't you write in french?

Administrator

Nov. 12, 2010 at 11:56 AM

The inaccuracy of the Geolocation Api of html5 may be it use the IP from your internet provider or ur pc has no GPS tools installed on it. Geolocation... Read more»

Cr.frozen

Nov. 12, 2010 at 11:33 AM

Html5 geolocation is not accurate?
How come?

Amo

Oct. 20, 2010 at 11:36 PM

HTML5 is great stuff

Archives:

Meet me on facebook: