搜索
写经验 领红包
 > 财经

php中常见魔术方法解析是什么(php魔术方法的讲解与使用)

导语:PHP中常见魔术方法解析

<?php class info {   private $province; //省  public $city; //城市  private $myname; //姓名   //__construct()方法到实例化时自动加载function  function __construct() {  echo "实例化我就起作用<br>";  $this->myname("Steven");  }   //__call()方法用来获取没有定义的function  function __call($name, $param) {  echo $name."这个方法没有定义,跑到我这儿来了<br>";  print_r($param) ;  echo "<br>";  }   //定义一个方法 ,即普通的定义方法 function myname($param) {  echo "定义过的就到定义过的这儿来,$param<br>";  return $this->myname = $param;  }   //__get()得到私有变量值  private function __get($name) {  if (isset ($this-> $name)) {  return ($this-> $name);  } else {  return false;  }  }   //__toString()  private function __toString() {  echo '你输入的这个类的名子叫'.__CLASS__."<br>";  return __CLASS__;  }   //__set()方法用来设置私有变量值  private function __set($name, $value) {  echo "设置私有变量时,自动调用了这个__set()方法为私有变量赋值<br>";  $this-> $name = $value;  }   //__isset()方法判断私有变量值  private function __isset($name) {  echo "isset()函数判断私有变量是不是被定义时,自动调用__isset()<br>";  return isset ($this-> $name);  }   //__unset()方法删除私有变量值  private function __unset($name) {  echo "unset()函数删除一个私有变量时,自动调用__unset()<br>";  unset ($this-> $name);  }   //__destruct()删除类对象时自动会调用  public function __destruct() {  echo '删除类对像,就到__destruct()这儿来<br>';  } }  $info = new info(); //会调用__construct()方法和__destruct()方法 $info->province = "陕西"; //会调用__set()方法 $info->city = "西安"; //不会调用__set()方法 $info->myname("Steven"); //会调用myname()方法 $info->nickname("peng"); //会调用__call()方法 (string)$info; //会调用__toString()方法 var_dump(isset ($info->province)) . "<br>"; //会调用__isset()方法和__get()方法 echo $info->province . "<br>"; //会调用__get()方法 unset ($info->province); //会调用__unset()方法 echo $info->province; //已经被删除了, 所以不会显示为安徽了,会调用__isset()方法 ?>

结果:

实例化我就起作用 定义过的就到定义过的这儿来,Steven 设置私有变量时,自动调用了这个__set()方法为私有变量赋值 定义过的就到定义过的这儿来,Steven nickname这个方法没有定义,跑到我这儿来了 Array ( [0] => peng ) 你输入的这个类的名子叫info isset()函数判断私有变量是不是被定义时,自动调用__isset() bool(true) 陕西 unset()函数删除一个私有变量时,自动调用__unset() isset()函数判断私有变量是不是被定义时,自动调用 __isset() 删除类对像,就到__destruct()这儿来

总结:

1,__set(),__get(),__isset(),__unset()可以归于一类,对于私有变量的赋值,取值,判断,删除操作。以赋值为例,$province是私有变量,$city是全局变量,赋值的时候,$province调用了__set()方法,而$city却没有调用__set()这个方法

2,__construct()构造函数,__destruct()析构函数,他们二个都是实例化类的时候就会产生,有一点不同,构造在最前面,析构函数在最后面。

3,当你调用了一个class中没有的方法时,肯定会报fatal error,如果有了__call()函数,就不会报错了。$info->nickname("tank");class中并没有这个方法,但是他没有报错。传的参数是字符串,__call会把他转成数组。Array ( [0] => tank )

4,(string)$info;把$info这个obj强制转成字符串,从表面意思看是这个,但是实际上是调用__toString()的方法。

附几个PHP 的魔术常量:

本文内容由小琪整理编辑!