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. 03, 2014 at 01:33
    The Liberal Democrats pledge 15 hours of free childcare for all two-year-olds in England, as they begin to set out pre-election policies.
    Read more»
  • Sep. 03, 2014 at 01:19
    Cockatoos learn to make and use tools when shown by another bird, research reveals.
    Read more»
  • Sep. 03, 2014 at 01:05
    Wormwood Scrubs prison in west London is described as "filthy" and unsafe in a report by inspectors.
    Read more»
  • Sep. 03, 2014 at 01:01
    The UK edges up the World Economic Forum's worldwide rankings, but the group warns that the health of the global economy is at risk.
    Read more»
  • Sep. 03, 2014 at 00:56
    Two US men who spent three decades in prison for rape and murder, one on death row, are released after new DNA evidence proves their innocen...
    Read more»
  • Sep. 03, 2014 at 00:36
    An Islamic State video purporting to show the beheading of Steven Sotloff, a US journalist abducted by the group, is released.
    Read more»
  • Sep. 03, 2014 at 00:29
    Everton defender John Stones will make his first start for England in Wednesday's friendly against Norway at Wembley.
    Read more»
  • Sep. 03, 2014 at 00:20
    A British hostage is among those being held by Islamic State militants, Number 10 confirms.
    Read more»
  • Sep. 02, 2014 at 23:58
    The FBI are investigating allegations that the online accounts of dozens of celebrities have been hacked, allowing explicit photos to be pos...
    Read more»
  • Sep. 02, 2014 at 22:54
    The parents of Ashya King are released from prison in Spain after UK prosecutors withdrew a European arrest warrant.
    Read more»
  • Sep. 02, 2014 at 22:38
    Wall Street Market Report
    Read more»
  • Sep. 02, 2014 at 22:35
    Watch the latest news summary from BBC World News. International news updated 24 hours a day.
    Read more»
  • Sep. 02, 2014 at 21:52
    A teacher's strike in British Columbia has postponed the first day of school for about 50,000 children.
    Read more»
  • Sep. 02, 2014 at 21:49
    The leaking of intimate photos of celebrities from iCloud accounts was due to a theft of log-in information, not a security breach, says App...
    Read more»
  • Sep. 02, 2014 at 21:44
    The US military says it has carried out air strikes in Somalia, targeting the leader of militant group al-Shabab, but it is unclear if he wa...
    Read more»
  • Sep. 02, 2014 at 21:23
    Twelve new victims have come forward since a report found at least 1,400 children were abused in Rotherham, South Yorkshire's chief constabl...
    Read more»
  • Sep. 02, 2014 at 20:35
    More than 30 teenagers held at a juvenile detention centre in Tennessee escape by crawling through a fence and nine are still being sought.
    Read more»
  • Sep. 02, 2014 at 20:16
    Neuroscientists discover that primate brains show consistent differences according social status
    Read more»
  • Sep. 02, 2014 at 20:07
    How the EU's 'peace project' can work in a time of war
    Read more»
  • Sep. 02, 2014 at 19:48
    Nato must back words with actions to reassure countries bordering on Russia, the EU's new foreign affairs chief says.
    Read more»

Recent Comments:

Ehcjntublr

Jun. 11, 2014 at 06:06 PM

leebvfnnbovfmoebzjsbhjkf, http://www.pykbyrhrlo.com/ spdwthctlr

Natural hair care products

May. 27, 2014 at 09:05 AM

These are really great ideas in on the topic of blogging. You have touched some pleasant things here. Any way keep up wrinting.

Remedies for piles

May. 18, 2014 at 05:44 PM

Thanks for finally writing about > %blog_title% < Loved it!

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»

Archives:

Meet me on facebook: