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

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

WBOY
Release: 2016-06-23 14:04:05
Original
1094 people have browsed it

先看代码:

class test(){public $mPageNo = 1;public $mPageSize = 20;private $mPageOffset = 0;}
Copy after login


请教,如何实现当给$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;	}}
Copy after login


$t = new test();$t->page_no = 2;print_r($t->mPageOffset);
Copy after login


这样得到的却是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);

source:php.cn
Statement of this Website
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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template