note 114442 added to language.types.object

From: Date: Fri, 21 Feb 2014 06:38:55 +0000
Subject: note 114442 added to language.types.object
Groups: php.notes 
Request: Send a blank email to php-notes+get-198578@lists.php.net to get a copy of this message
Here a new updated version of 'stdObject' class. It's very useful when extends to controller on MVC design pattern, user can create it's own class. Hope it help you. <?php class stdObject { public function __construct(array $arguments = array()) { if (!empty($arguments)) { foreach ($arguments as $property => $argument) { $this->{$property} = $argument; } } } public function __call($method, $arguments) { $arguments = array_merge(array("stdObject" => $this), $arguments); // Note: method argument 0 will always referred to the main class ($this). if (isset($this->{$method}) && is_callable($this->{$method})) { return call_user_func_array($this->{$method}, $arguments); } else { throw new Exception("Fatal error: Call to undefined method stdObject::{$method}()"); } } } // Usage. $obj = new stdObject(); $obj->name = "Nick"; $obj->surname = "Doe"; $obj->age = 20; $obj->adresse = null; $obj->getInfo = function($stdObject) { // $stdObject referred to this object (stdObject). echo $stdObject->name . " " . $stdObject->surname . " have " . $stdObject->age . " yrs old. And live in " . $stdObject->adresse; }; $func = "setAge"; $obj->{$func} = function($stdObject, $age) { // $age is the first parameter passed when calling this method. $stdObject->age = $age; }; $obj->setAge(24); // Parameter value 24 is passing to the $age argument in method 'setAge()'. // Create dynamic method. Here i'm generating getter and setter dynimically // Beware: Method name are case sensitive. foreach ($obj as $func_name => $value) { if (!$value instanceOf Closure) { $obj->{"set" . ucfirst($func_name)} = function($stdObject, $value) use ($func_name) { // Note: you can also use keyword 'use' to bind parent variables. $stdObject->{$func_name} = $value; }; $obj->{"get" . ucfirst($func_name)} = function($stdObject) use ($func_name) { // Note: you can also use keyword 'use' to bind parent variables. return $stdObject->{$func_name}; }; } } $obj->setName("John"); $obj->setAdresse("Boston"); $obj->getInfo(); ?> ---- Server IP: 72.52.91.14 Probable Submitter: 72.52.91.14 ---- Manual Page -- http://php.net/manual/en/language.types.object.php Edit -- https://master.php.net/note/edit/114442 Del: integrated -- https://master.php.net/note/delete/114442/integrated Del: useless -- https://master.php.net/note/delete/114442/useless Del: bad code -- https://master.php.net/note/delete/114442/bad+code Del: spam -- https://master.php.net/note/delete/114442/spam Del: non-english -- https://master.php.net/note/delete/114442/non-english Del: in docs -- https://master.php.net/note/delete/114442/in+docs Del: other reasons-- https://master.php.net/note/delete/114442 Reject -- https://master.php.net/note/reject/114442 Search -- https://master.php.net/manage/user-notes.php

« previous php.notes (#198578) next »