>백엔드 개발 >PHP 튜토리얼 >关于类里设置属性的同时,动态给其他属性计算并赋值

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

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB원래의
2016-06-23 14:04:051126검색

先看代码:

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.