您的位置:首页 > 编程语言 > PHP开发

php魔术方法

2017-04-07 16:26 169 查看


魔术方法总结


__construct

实例化一个对象的时候触发,参数可以根据需求随意添加,可以用来初始化一些成员属性。

<?php
classGirl
{
 public$name;
public$age;
public$height;
publicfunction__construct($name,$age,$height)
  {
   $this->name=$name;
  $this->age=$age;
  $this->height=$height;
  }
publicfunctionsay()
  {
   echo'我叫'.$this->name;
  echo'身高'.$this->height;
  }
}
$girl=newGirl('刘亦菲','30',170);
$girl->say();


__destruct

脚本运行结束或者对象被销毁的时候会自动触发。

<?php
classBoy
{
 ....
  publicfunction__destruct()
  {
   echo'脚本运行结束了';
  }
}
$boy=newBoy();


__get

获取不可访问或不存在的成员属性的时候触发,参数就是属性名。


__set

设置不存在或者不可访问的成员属性的时候触发,参数是属性名,属性值。

<?php
classWhiteFace
{
 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;
 }
 returnfalse;
 }
}
$mei=newWhiteFace('屋里帅',25,180);
$mei->age;//$a就是调用的这个属性名。
$mei->height=190;


__unset

触发时机:当用unset()销毁一个不存在或者不可访问的成员属性的时候被触发。

<?php
classCat
{
 public$name;
private$age;
public$height;
publicfunction__unset($args)
 {
  echo$this->$args.'被销毁了';
 }
}
$bosi=newCat('波斯猫',10,20);l
unset($bosi->age);//输出:10被销毁了。


__isset()

用empty()或isset()去判断一个不存在或者不可访问的成员属性的时候会被触发,参数是属性名。

<?php
classCat
{
.......
 publicfunction__isset($arg)
  {
   returnisset($this->$arg);
  }
}
isset($bosi->age);


__invoke

将一个对象当做函数调用时会触发该方法,调用时传递了多少个参数这里就写多少个参数。

<?php
classDog
{
 public$name='wang';
publicfunctionwangwang()
 {
  echo'旺旺';
 }
publicfunction__invoke($a,$b,$c)
 {
  echo'将对象作为函数使用了';
 }
}
$tai=newDog();
$tai(100,200,300);


__toString

当echo一个对象的时候调用,这个函数里面返回什么字符串echo的时候就打印出什么。没有参数,但是有返回值,返回一个字符串,该字符串需要自己定制。

<?php
classDog
{
 ......
  publicfunction__toString()
  {
  return'我的姓名是'.$this->name;
}
}
$tai=newDog();
echo$tai;


__debugInfo

当使用var_dump打印对象的时候会被调用。返回一个自定义的数组,数组里面是需要打印的东西,没有参数。

<?php
classDog
{
 ......
  publicfunction__debugInfo()
  {
   return['name','age'];
  }
}
$tai=newDog();
var_dump($tai);


__call()

调用不存在或者不可访问的成员方法的时候会被触发

<?php
classDog
{
 .......
 function__call($name,$args)
 {
  var_dump($name);//函数名
  var_dump($args);
}
}
$tai=newDog();
$tai->eat(100,100);


__callStatic

调用不存在或者不可访问的成员方法时会被触发。

classSinger
{
 public$name;
privatestaticfunction__callstatic()
 {
  echo'明星的生活';
 }
}
$liu=newSinger();
$liu::living();


__autoload

在当前脚本中去加载一个不存在的类的时候会触发这个方法

<?php
function__autoload($name)//$name就是类名
{
 echo'我被调用了';
$fileName=$name.'.php';
include$fileName;
}
//include'Car.php';
//自动加载
$bmw=newCar();
$bmw->run();


__sleep

当序列化一个对象的时候会被触发,没有参数,返回一个数组,里面是你要序列化的属性。

<?php
classPig
{
 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();
  
  }
functionkiss()
  {
   echo'么么哒';
  }
}
$bajie=newPig('猪八戒','钉耙');
//怎么将程序运行中的对象保存起来---》序列化。
$str=serialize($bajie);
//将序列化的字符串写到文件中
file_put_contents('bajie.php',$str);


__wakeup

当反序列化一个对象的时候会被触发。


__clone

当克隆一个对象的时候会被触发。

$er=clone$bajie;//克隆的对象跟原来的一模一样
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: