__construct
实例化一个对象的时候触发,参数可以根据需求随意添加,可以用来初始化一些成员属性。
class Girl
{
public $name;
public $age;
public $height;
public function __construct($name,$age,$height)
{
$this->name = $name;
$this->age = $age;
$this->height = $height;
}
public function say()
{
echo '我叫'.$this->name;
echo '身高'.$this->height;
}
}
$girl = new Girl('刘亦菲','30',170);
$girl -> say();
__destruct
脚本运行结束或者对象被销毁的时候会自动触发。
<?php
class Boy
{
....
public function __destruct()
{
echo '脚本运行结束了';
}
}
$boy = new Boy();
__get
获取不可访问或不存在的成员属性的时候触发,参数就是属性名。
__set
设置不存在或者不可访问的成员属性的时候触发,参数是属性名,属性值。
<?php
class WhiteFace
{
public $face;
private $age;
private $height;
function __get($a)//获取值的时候
{
echo '我被调用了';
}
function __set($name,$value)
{
//echo $name;
//echo $value;
if($name == 'age'){
$this->$name = $value;
return;
}
return false;
}
}
$mei = new WhiteFace('屋里帅',25,180);
$mei->age;//$a就是调用的这个属性名。
$mei->height = 190;
__unset
触发时机:当用unset()销毁一个不存在或者不可访问的成员属性的时候被触发。
<?php
class Cat
{
public $name;
private $age;
public $height;
public function __unset($args)
{
echo $this->$args.'被销毁了';
}
}
$bosi = new Cat('波斯猫',10,20);l
unset($bosi->age);//输出:10被销毁了。
__isset()
用empty()或isset()去判断一个不存在或者不可访问的成员属性的时候会被触发,参数是属性名。
<?php
class Cat
{
.......
public function __isset($arg)
{
return isset($this->$arg);
}
}
isset($bosi->age);
__invoke
将一个对象当做函数调用时会触发该方法,调用时传递了多少个参数这里就写多少个参数。
<?php
class Dog
{
public $name = 'wang';
public function wangwang()
{
echo '旺旺';
}
public function __invoke($a,$b,$c)
{
echo '将对象作为函数使用了';
}
}
$tai = new Dog();
$tai(100,200,300);
__toString
当echo一个对象的时候调用,这个函数里面返回什么字符串echo的时候就打印出什么。没有参数,但是有返回值,返回一个字符串,该字符串需要自己定制。
<?php
class Dog
{
......
public function __toString()
{
return '我的姓名是'.$this->name;
}
}
$tai = new Dog();
echo $tai;
__debugInfo
当使用var_dump打印对象的时候会被调用。返回一个自定义的数组,数组里面是需要打印的东西,没有参数。
<?php
class Dog
{
......
public function __debugInfo()
{
return ['name','age'];
}
}
$tai = new Dog();
var_dump($tai);
__call()
调用不存在或者不可访问的成员方法的时候会被触发
<?php
class Dog
{
.......
function __call($name,$args)
{
var_dump($name);//函数名
var_dump($args);
}
}
$tai = new Dog();
$tai->eat(100,100);
__callStatic
调用不存在或者不可访问的成员方法时会被触发。
class Singer
{
public $name;
private static function __callstatic()
{
echo '明星的生活';
}
}
$liu = new Singer();
$liu::living();
__autoload
在当前脚本中去加载一个不存在的类的时候会触发这个方法
<?php
function __autoload($name)//$name就是类名
{
echo '我被调用了';
$fileName = $name.'.php';
include $fileName;
}
//include 'Car.php';
//自动加载
$bmw = new Car();
$bmw->run();
__sleep
当序列化一个对象的时候会被触发,没有参数,返回一个数组,里面是你要序列化的属性。
class Pig
{
public $name;
public $tool;
function __construct($name,$tool)
{
$this->name = $name;
$this->tool = $tool;
}
function __sleep()
{
echo '我要睡觉了';
return ['name','tool'];//选择你想序列化的属性
}
function __wakeup()
{
echo '我醒了';
$this->kiss();
}
function kiss()
{
echo '么么哒';
}
}
$bajie = new Pig('猪八戒','钉耙');
//怎么将程序运行中的对象保存起来---》序列化。
$str = serialize($bajie);
//将序列化的字符串写到文件中
file_put_contents('bajie.php',$str);
__wakeup
当反序列化一个对象的时候会被触发。
__clone
当克隆一个对象的时候会被触发。
$er = clone $bajie;//克隆的对象跟原来的一模一样