note 86047 added to language.oop5.references

From: Date: Tue, 30 Sep 2008 23:38:18 +0000
Subject: note 86047 added to language.oop5.references
Groups: php.notes 
Request: Send a blank email to php-notes+get-144919@lists.php.net to get a copy of this message
USE OOP to ACCESS OBJECT REFERENCES The PHP language itself offers a slew of nifty operators that can copy, clone, and alias objects and references in many ways. But that kind of syntax looks rather fearsome. Here, I use OOP to get the same results, but with cleaner and more practical code. Below, one DataModel object is instantiated so that many instances of DataControl can use and alter it. Regardless of how PHP works, the OOP styled setup keeps all DataControl instances "on the same page" because they are all looking at the "same model" - which this code clearly shows. <?php class DataModel { protected $name, $data; public function __construct($dmName, $dmData) { $this->name = $dmName; $this->setData($dmData); } public function setData($dmData) { if(is_numeric($dmData)) { $this->data = $dmData; } } public function __toString() { return "DataModel [name=$this->name, data=$this->data]"; } } class DataControl { protected $name, $model; public function __construct($dcName, $dcModel) { $this->name = $dcName; $this->model = $dcModel; } public function setData($dmData) { $this->model->setData($dmData); } public function __toString() { return "DataController [name=$this->name, model=" . $this->model->__toString() . "]"; } } # create one instance of DataModel... $model = new DataModel('dm1', 128); echo $model . '<br><br>'; # create several instances of DataControl, passing $model to each one... $dc1 = new DataControl('dc1', $model); $dc2 = new DataControl('dc2', $model); $dc3 = new DataControl('dc3', $model); echo $dc1 . '<br>'; echo $dc2 . '<br>'; echo $dc3 . '<br><br>'; # To change data, use any $dataControl->setData()... $dc3->setData(512); echo $dc1 . '<br>'; echo $dc2 . '<br>'; echo $dc3 . '<br><br>'; ?> * * * output * * * DataModel [name=dm1, data=128] DataController [name=dc1, model=DataModel [name=dm1, data=128]] DataController [name=dc2, model=DataModel [name=dm1, data=128]] DataController [name=dc3, model=DataModel [name=dm1, data=128]] DataController [name=dc1, model=DataModel [name=dm1, data=512]] DataController [name=dc2, model=DataModel [name=dm1, data=512]] DataController [name=dc3, model=DataModel [name=dm1, data=512]] ---- Server IP: 69.147.83.197 Probable Submitter: 67.150.11.193 ---- Manual Page -- http://www.php.net/manual/en/language.oop5.references.php Edit -- https://master.php.net/note/edit/86047 Del: integrated -- https://master.php.net/note/delete/86047/integrated Del: useless -- https://master.php.net/note/delete/86047/useless Del: bad code -- https://master.php.net/note/delete/86047/bad+code Del: spam -- https://master.php.net/note/delete/86047/spam Del: non-english -- https://master.php.net/note/delete/86047/non-english Del: in docs -- https://master.php.net/note/delete/86047/in+docs Del: other reasons-- https://master.php.net/note/delete/86047 Reject -- https://master.php.net/note/reject/86047 Search -- https://master.php.net/manage/user-notes.php

« previous php.notes (#144919) next »