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

  • Apr. 20, 2014 at 17:48
    The Russian foreign ministry expresses outrage at a fatal shooting incident in eastern Ukraine which it blames on Ukrainian nationalists.
    Read more»
  • Apr. 20, 2014 at 17:48
    Rubin "Hurricane" Carter, the US boxer whose wrongful conviction for murder caused an international outcry, dies aged 76.
    Read more»
  • Apr. 20, 2014 at 17:48
    Watch the latest news summary from BBC World News. International news updated 24 hours a day.
    Read more»
  • Apr. 20, 2014 at 17:27
    Afghan presidential candidate Abdullah Abdullah has extended his lead over his rival Ashraf Ghani, latest results from the presidential poll...
    Read more»
  • Apr. 20, 2014 at 17:05
    The last communications between the South Korean ferry that sank on Wednesday and traffic services reveal panic and indecision by the crew.
    Read more»
  • Apr. 20, 2014 at 17:05
    Media workers across Pakistan have held angry protests after a leading journalist was shot and wounded on Saturday.
    Read more»
  • Apr. 20, 2014 at 17:01
    A British national dies after a double-decker bus reportedly crashes into a ravine in Malaysia.
    Read more»
  • Apr. 20, 2014 at 16:56
    The Archbishop of Canterbury highlights the suffering of people in conflicts around the world during his Easter Sunday sermon.
    Read more»
  • Apr. 20, 2014 at 16:46
    Images from around the world as Christians mark Easter Sunday
    Read more»
  • Apr. 20, 2014 at 16:38
    Ian McIntyre, a former controller of both BBC Radio 3 and BBC Radio 4, has died aged 82.
    Read more»
  • Apr. 20, 2014 at 16:36
    Islamist militants kill 14 Algerian soldiers in an ambush on a military convoy in mountains east of the capital Algiers.
    Read more»
  • Apr. 20, 2014 at 16:35
    Scottish government agencies Scottish Enterprise and Visit Scotland have quit business lobby organisation CBI after it formally backed the c...
    Read more»
  • Apr. 20, 2014 at 16:05
    A businessman appointed by the prime minister to head a multibillion-pound quango steps down after it was revealed that he was bankrupt.
    Read more»
  • Apr. 20, 2014 at 15:33
    A drone attack in south Yemen has killed at least three suspected al-Qaeda fighters, defence officials and local tribal chiefs say.
    Read more»
  • Apr. 20, 2014 at 15:28
    Russian media is reporting that up to 5 people were killed after gunmen attacked a checkpoint manned by pro-Russian activists near Sloviansk...
    Read more»
  • Apr. 20, 2014 at 15:17
    The search for three Sherpa guides, missing after an avalanche on Mount Everest killed 13 of their colleagues, is called off.
    Read more»
  • Apr. 20, 2014 at 14:02
    A portrait of the Queen by celebrated British photographer David Bailey is being released to mark the monarch's 88th birthday.
    Read more»
  • Apr. 20, 2014 at 13:46
    Pope Francis celebrates Easter in front of thousands in St Peter's Square, praying for peace in Syria and Ukraine and "an end to all war".
    Read more»
  • Apr. 20, 2014 at 13:38
    Newsreader George Alagiah says he has been "strengthened" by people's messages after revealing he has bowel cancer.
    Read more»
  • Apr. 20, 2014 at 13:35
    Jack White records and cuts a single in four hours, and claims a world record has been broken.
    Read more»

Recent Comments:

Website

Mar. 25, 2014 at 08:19 PM

There are books, home study courses, workshops and other means of information, to gain the knowledge required to become the alpha leader. If you want ... Read more»

Titia

Feb. 15, 2014 at 01:48 AM

buy car insurance online prozac 40mg no rx best deals on vigra and cialis website auto insurance quoye www.evansvillecommunitytheatre.com ... Read more»

Cheap online prescription glasses

Jun. 27, 2012 at 03:47 PM

I was suggested this blog by my cousin. I am not sure whether this post is
written by him as nobody else know such detailed about my difficulty.<... Read more»

Emmanuel

Jun. 23, 2012 at 04:02 PM

This article is about the awesome HTML 5 video feature which takes time for web developers to build up web video portals, gjust like does youtube. Wit... Read more»

Oil water separators

Jun. 21, 2012 at 12:37 PM

For the reason that the admin of this website is working,
no hesitation very rapidly it will be renowned, due
to its quality contents.

Archives:

Meet me on facebook: