• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
readonly کردن یک پروپرتی داخل کلاس
#1
Smile 
کردن یک پروپرتی یا به عبارتی ، فقط خواندنی کردن یک پروپرتی یکی از ریزه کاری های برنامه نویسی است .
گاهی داخل بدنه کلاس یک پروپرتی از نوع 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-se...perty.html
وبلاگ rezaonline.net/blog
سفارش برنامه نویسی reza.biz
Php , mysql , postgresql , redis , Yii and ... Cool
  پاسخ
تشکر شده توسط : undefined molana M.J
#2
روشت میشه گفت اشتباه هست. تو در اصل پروپرتی نداری. متدهای جادویی get و set برای مواردی استفاده میشه که پروپرتی های داینامیک داشته باشی.
شما اگر می خوای یک پروپرتی رو readonly کنی مثلا پروپری param1 . اول از همه باید param1 رو به صورت protected یا private تعریف کنی و بعدش فقط یک متد getter مثل getParam1 براش تعریف کنی
  پاسخ
تشکر شده توسط : molana Reza undefined itstaghi
#3
این پست الان چه جوری اومده بالا؟ Huh
هر که با مرغ هوا دوست شود - خوابش آرامترین خواب جهان خواهد بود.
  پاسخ
تشکر شده توسط :
#4
(۱۳۹۲ بهمن ۲۹, ۱۰:۵۴ ق.ظ)admin نوشته: روشت میشه گفت اشتباه هست. تو در اصل پروپرتی نداری. متدهای جادویی get و set برای مواردی استفاده میشه که پروپرتی های داینامیک داشته باشی.
شما اگر می خوای یک پروپرتی رو readonly کنی مثلا پروپری param1 . اول از همه باید param1 رو به صورت protected یا private تعریف کنی و بعدش فقط یک متد getter مثل getParam1 براش تعریف کنی
وقتی با متد مقدارش رو بگیری دیگه باید یک متد دیگه هم بنویسی برای set کردنش .
روش معمولش همینیه که شما میگی اما این خوشکلتره Blush
وبلاگ rezaonline.net/blog
سفارش برنامه نویسی reza.biz
Php , mysql , postgresql , redis , Yii and ... Cool
  پاسخ
تشکر شده توسط : M.J


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان