note 63863 added to language.oop5.magic

From: Date: Sun, 02 Apr 2006 16:55:21 +0000
Subject: note 63863 added to language.oop5.magic
Groups: php.notes 
Request: Send a blank email to php-notes+get-107174@lists.php.net to get a copy of this message
If you use the Magical Method '__set()', be shure that the call of <?php $myobject->test['myarray'] = 'data'; ?> will not appear! For that u have to do it the fine way if you want to use __set Method ;) <?php $myobject->test = array('myarray' => 'data'); ?> If a Variable is already set, the __set Magic Method already wont appear! My first solution was to use a Caller Class. With that, i ever knew which Module i currently use! But who needs it... :] There are quiet better solutions for this... Here's the Code: <?php class Caller { public $caller; public $module; function __call($funcname, $args = array()) { $this->setModuleInformation(); if (is_object($this->caller) && function_exists('call_user_func_array')) $return = call_user_func_array(array(&$this->caller, $funcname), $args); else trigger_error("Call to Function with call_user_func_array failed", E_USER_ERROR); $this->unsetModuleInformation(); return $return; } function __construct($callerClassName = false, $callerModuleName = 'Webboard') { if ($callerClassName == false) trigger_error('No Classname', E_USER_ERROR); $this->module = $callerModuleName; if (class_exists($callerClassName)) $this->caller = new $callerClassName(); else trigger_error('Class not exists: \''.$callerClassName.'\'', E_USER_ERROR); if (is_object($this->caller)) { $this->setModuleInformation(); if (method_exists($this->caller, '__init')) $this->caller->__init(); $this->unsetModuleInformation(); } else trigger_error('Caller is no object!', E_USER_ERROR); } function __destruct() { $this->setModuleInformation(); if (method_exists($this->caller, '__deinit')) $this->caller->__deinit(); $this->unsetModuleInformation(); } function __isset($isset) { $this->setModuleInformation(); if (is_object($this->caller)) $return = isset($this->caller->{$isset}); else trigger_error('Caller is no object!', E_USER_ERROR); $this->unsetModuleInformation(); return $return; } function __unset($unset) { $this->setModuleInformation(); if (is_object($this->caller)) { if (isset($this->caller->{$unset})) unset($this->caller->{$unset}); } else trigger_error('Caller is no object!', E_USER_ERROR); $this->unsetModuleInformation(); } function __set($set, $val) { $this->setModuleInformation(); if (is_object($this->caller)) $this->caller->{$set} = $val; else trigger_error('Caller is no object!', E_USER_ERROR); $this->unsetModuleInformation(); } function __get($get) { $this->setModuleInformation(); if (is_object($this->caller)) { if (isset($this->caller->{$get})) $return = $this->caller->{$get}; else $return = false; } else trigger_error('Caller is no object!', E_USER_ERROR); $this->unsetModuleInformation(); return $return; } function setModuleInformation() { $this->caller->module = $this->module; } function unsetModuleInformation() { $this->caller->module = NULL; } } // Well this can be a Config Class? class Config { public $module; public $test; function __construct() { print('Constructor will have no Module Information... Use __init() instead!<br />'); print('--> '.print_r($this->module, 1).' <--'); print('<br />'); print('<br />'); $this->test = '123'; } function __init() { print('Using of __init()!<br />'); print('--> '.print_r($this->module, 1).' <--'); print('<br />'); print('<br />'); } function testFunction($test = false) { if ($test != false) $this->test = $test; } } echo('<pre>'); $wow = new Caller('Config', 'Guestbook'); print_r($wow->test); print('<br />'); print('<br />'); $wow->test = '456'; print_r($wow->test); print('<br />'); print('<br />'); $wow->testFunction('789'); print_r($wow->test); print('<br />'); print('<br />'); print_r($wow->module); echo('</pre>'); ?> Outputs something Like: Constructor will have no Module Information... Use __init() instead! --> <-- Using of __init()! --> Guestbook <-- 123 456 789 Guestbook ---- Server IP: 217.160.72.57 Probable Submitter: 84.135.124.194 ---- X-Spam-Status: No, hits=3.3 required=5.0 tests=DATE_MISSING,FROM_NO_LOWER, HTML_MESSAGE autolearn=no version=2.64 ---- Manual Page -- http://www.php.net/manual/en/language.oop5.magic.php Edit -- http://master.php.net/note/edit/63863 Del: integrated -- http://master.php.net/note/delete/63863/integrated Del: useless -- http://master.php.net/note/delete/63863/useless Del: bad code -- http://master.php.net/note/delete/63863/bad+code Del: spam -- http://master.php.net/note/delete/63863/spam Del: non-english -- http://master.php.net/note/delete/63863/non-english Del: in docs -- http://master.php.net/note/delete/63863/in+docs Del: other reasons-- http://master.php.net/note/delete/63863 Reject -- http://master.php.net/note/reject/63863 Search -- http://master.php.net/manage/user-notes.php

« previous php.notes (#107174) next »