这两个函数主要用在面向对象中。
类有很多private属性的变量,这些对象在类外是不能被调用的,但是有时候你却非常的想在类外对这类对象进行赋值操作,如果你是一名C++程序员的话肯定会这样做:
class A
{
private:
int name;
int age;
int id;
public:
int set_name(int a)
{
this->name = a;
}
}
这样就可以对私有变量name进行赋值,但是这样的缺陷是,你要是在类外想对id和age赋值的时候需要接着再写两个函数。
如果是PHP程序的话,遇到此类问题你就会从容多了。因为PHP为我们提供了__set函数。
对于这几个函数,我是这么理解的。
__set 可以修改对应私有变量的值,同时也对私有变量进行了一些特殊处理,这个特殊处理的结果就是isset()变量,返回值为真。
__get 外部可以直接获取变量的值。
__unset 调用这个函数相当于注销了变量,__isset的时候返回false
下面我们就看看PHP是怎么解决这个问题的。以下是一段PHP代码:
用法就是这样的
class Base
{
private $name;
function __set($property_name,$value)
{
$this->property_name = $value;
}
function __get($property_name)
{
/*先判断私有变量$this->property_name有没有被设置为外部可见*/
if(isset($this->property_name))
return $this->property_name;
else
return NULL;
}
function __isset($property_name)
{
return isset($this->property_name);
}
function __unset($property_name)
{
unset($this->property_name);
}
}
$p = new Base();
$p->name = "PHP Code";/*可以直接对name赋值,无视其private属性*/
echo $p->name; /*可以直接打印*/
unset($p->name); /*取消name外部可见的属性*/
echo $p->name; /*这个时候就非法了*/