魔术变量:
__LINE__ 文件中的当前行号。
__FILE__ 文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。
__DIR__ 文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。
__FUNCTION__ 本常量返回该函数被定义时的名字.
__CLASS__ 返回定义的类名。
__TRAIT__ http://www.php.net/manual/zh/language.oop5.traits.php
__METHOD__ 返回该方法被定义时的名字。
__NAMESPACE__ 当前命名空间的名字。
魔术方法:
__get() //自动获取私有属性,公开的属性不会调用。
__set() //自动设置私有属性,公开的属性不会调用。
__isset()//当用使用isset()方法去测定对象里面成员是否被设定时,如果成员是私有成员的话无法直接访问,只要在类里面加__isset()就可以通过isset()在外部测定私有成员属性了。
__unset()//当通过unset()删除私有属性的时候,类内加__unset()将会自动调用删除私有属性。
class Person
{
private $name;
private $sex;
private $age;
function say()
{
echo "name" . $this->name . "sex" . $this->sex . "age" . $this->age;
}
function __get($property_name)
{
return $this->$property_name;
}
function __set($property_name, $value)
{
$this->$property_name = $value;
}
function __isset($nm)
{
return isset($this->$nm);
}
function __unset($nm)
{
unset($this->$nm);
}
}
$p1 = new Person();
$p1->name = 'xiaowang'; //如果没有__set 会报错,不能再类外部操作私有属性
echo $p1->name;//如果没有__get 会报错,不能在类外部操作私有属性。
//通过自动调用__get()和__set()方法直接存取封装的私有成员的。
__toString() 使用echo 或者print 直接输出一个对象时,自动调用此魔术方法。
__clone() 在使用 clone 关键字科隆对象时,自动调用此方法,对科隆出来的对象初始化。
__sleep() 在串行化的时候自动调用。可以设置需要串行化的对象属性。
__wakeup() 字符串返串行化时调用。对串行化回来的对象进行初始化。