readonly کردن یک پروپرتی داخل کلاس
لینک کوتاه یکشنبه , 27 بهمن 1392 3 دیدگاه
گاهی داخل بدنه کلاس یک پروپرتی از نوع public را مقدار دهی میکنیم اما نمیخواهیم اجازه بدیم بعدا در توسعه کلاس عمدا یا سهوا این پروپرتی از بیرون مقدار دهی شود
راه حل خیلی ساده است ، ما یک کلاس اصلی میسازیم با متدهای جادویی __set و __get
سپس دسترسی و انتخاب پروپرتی readonly را انجام میدهیم به شکل زیر .
//main class class main { private $_var = array(); private $readonlyParams = array(); protected function setReadOnlyParams($key=null) { if($key) $this->readonlyParams[] = $key; } public function __set($key,$val) { if( ! in_array($key,$this->readonlyParams)) $this->_var[$key] = $val; } public function __get($key) { return isset($this->_var[$key])?$this->_var[$key]:null; } protected function setVar($key,$val) { $this->_var[$key] = $val; } } //child class class child extends main { public function __construct() { parent::setVar('param1','1'); parent::setReadOnlyParams('param1'); parent::setVar('param2','2'); } } //example $obj = new child; echo $obj->param1; // show: 1 echo "<br>"; echo $obj->param2; // show: 2 echo "<hr>"; $obj->param1 = 'new 1'; $obj->param2 = 'new 2'; echo $obj->param1; // (read only params!)show:1 echo "<br>"; echo $obj->param2; // show: new 2
مرسی برای من بسیار مفید و کاربردی بود