跳转到主内容
极星编程网:以代码为星,赴技术山海!

关于类里设置属性的同时,动态给其他属性计算并赋值

先看代码:
class test(){public $mPageNo = 1;public $mPageSize = 20;private $mPageOffset = 0;}
请教,如何实现当给$mPageNo或者$mPageSize赋值的时候,就能自动给$mPageOffset赋值为($mPageNo-1)*$mPageSize ? 回复讨论(解决方案) 需要借助魔术方法 __set(),同时还需要将 $mPageSize $mPageNo 访问修饰符改为 private 或 protected。而且如果是直接读取的话,还需要另外的 __get() 方法,总之比较麻烦。 你不妨直接写个方法  setPageOffest($pageno=1, $pagesize=20) 需要借助魔术方法 __set(),同时还需要将 $mPageSize $mPageNo 访问修饰符改为 private 或 protected。而且如果是直接读取的话,还需要另外的 __get() 方法,总之比较麻烦。 你不妨直接写个方法  setPageOffest($pageno=1, $pagesize=20)
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!!何解呢? 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);

相关文章