先看代码:class test(){
public $mPageNo = 1;
public $mPageSize = 20;
private $mPageOffset = 0;
}
请教,如何实现当给$mPageNo或者$mPageSize赋值的时候,就能自动给$mPageOffset赋值为($mPageNo-1)*$mPageSize ?
phpclass

解决方案 »

  1.   

    需要借助魔术方法 __set(),同时还需要将 $mPageSize $mPageNo 访问修饰符改为 private 或 protected。而且如果是直接读取的话,还需要另外的 __get() 方法,总之比较麻烦。
    你不妨直接写个方法  setPageOffest($pageno=1, $pagesize=20) 
      

  2.   

    class test { private $mPage_no = 1; //页码
    private $mPage_size = 40; //每页条数
    private $mPageOffset = 0; function __set($property, $value) {
    if ($property=='mPage_no' || $property=='mPage_Size') {
    $this->mPageOffset = (($this->mPage_no)-1) * ($this->mPage_size);
    //print_r($this->mPageOffset);
    }
    }

    function __get($property) {
    return $this->$property;
    }
    }$t = new test();
    $t->page_no = 2;
    print_r($t->mPageOffset);
    这样得到的却是0!!何解呢?
      

  3.   

    class test {
     
        private $mPage_no = 1;        //页码
        private $mPage_size = 40;    //每页条数
        private $mPageOffset = 0;
     
        function __set($property, $value) {
            $this->{$property} = $value; // __set 并不会自动赋值
            if ($property=='mPage_no' || $property=='mPage_Size') {
                $this->mPageOffset = (($this->mPage_no)-1) * ($this->mPage_size);        }
        }
         
        function __get($property) {
            return $this->$property;
        }
    }$t = new test();
    // $t->page_no = 2; 变量名错误,且需要注意区分大小写
    $t->mPage_no = 2;
    print_r($t->mPageOffset);