PDA

View Full Version : آموزش: readonly کردن یک پروپرتی داخل کلاس



rezaonline.net
یک شنبه 27 بهمن 1392, 23:38 عصر
کردن یک پروپرتی یا به عبارتی ، فقط خواندنی کردن یک پروپرتی یکی از ریزه کاری های برنامه نویسی است .
گاهی داخل بدنه کلاس یک پروپرتی از نوع 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

منبع : http://www.rezaonline.net/blog/how-to-set-readonly-property.html