PHP中的魔术方法
1.__get
用途:读取私有的成员属性,传入一个参数
例子:<?php
Class Person
{
private $_name = '花花';
private $_age = 18;
private $_sex = '女';
public function __get($name)
{
$allowVars = ['_name','_age'];
if (in_array($name,$allowVars)) {
return $this->$name;
}
}
}
$p = new Person();
echo $p->_name;
echo $p->_age;
echo $p->_sex;
输出结果为
花花18
2.__set
用途:修改和设置私有的成员属性,两个参数(属性名,值)
例子:<?php
Class Person
{
<span style="white-space:pre"> </span>private $_name = '花花';
<span style="white-space:pre"> </span>private $_age = 18;
<span style="white-space:pre"> </span>private $_sex = '女';
<span style="white-space:pre"> </span>public function __get($name)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>return $this->$name;
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>public function __set($key,$value)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>return $this->$key = $value;
<span style="white-space:pre"> </span>}
}
$p = new Person();
$p->_name = '小布';
echo $p->_name;
输出结果为
注意:使用set方法时需要配合使用get方法
3.__unset
用途:删除和销毁私有成员属性时触发,一个参数
例子:<?php
Class Person
{
<span style="white-space:pre"> </span>private $_name = '花花';
<span style="white-space:pre"> </span>private $_age = 18;
<span style="white-space:pre"> </span>private $_sex = '女';
<span style="white-space:pre"> </span>public function __get($name){
<span style="white-space:pre"> </span>return $this->$name;
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>public function __unset($name)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>unset($this->$name);
<span style="white-space:pre"> </span>}
}
$p = new Person();
unset($p->_name);
echo $p->_name;
输出结果为
4.__isset
用途:删除和销毁私有成员属性时触发,一个参数
例子:<?php
Class Person
{
<span style="white-space:pre"> </span>private $_name = '花花';
<span style="white-space:pre"> </span>private $_age = 18;
<span style="white-space:pre"> </span>private $_sex = '女';
<span style="white-space:pre"> </span>public function __isset($name)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>if (isset($this->$name)) {
<span style="white-space:pre"> </span>echo '设置过';
<span style="white-space:pre"> </span>} else {
<span style="white-space:pre"> </span>echo '未设置过';
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>}
}
$p = new Person();
isset($p->_name);
isset($p->_home);
输出结果为
3.__construct
用途:实例化一个对象时自动执行,参数自己规定
例子:<?php
Class Person
{
<span style="white-space:pre"> </span>private $_name;
<span style="white-space:pre"> </span>private $_age;
<span style="white-space:pre"> </span>private $_sex;
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>public function __construct($name,$age,$sex)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>$this->_name = $name;
<span style="white-space:pre"> </span>$this->_age = $age;
<span style="white-space:pre"> </span>$this->_sex = $sex;
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>public function __get($name)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>return $this->$name;
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>
}
$p = new Person('花花',18,'女');
echo $p->_name;
echo $p->_age;
输出结果为
<span style="font-size:12px;">花花18</span>