Home >Backend Development >PHP Tutorial >关于类里设置属性的同时,动态给其他属性计算并赋值

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

WBOY
WBOYOriginal
2016-06-23 14:04:051096browse

先看代码:

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);

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn