php中的魔术函数使用
来源:互联网 发布:学电脑编程先学什么 编辑:程序博客网 时间:2024/05/21 00:53
1、__tostring()
当输出变量时,自动调用,需要一个return;
<?phpclass Person{ private $name = ""; function __construct($name = ""){ $this->name = $name; } function __tostring(){//在类中定义一个__toString方法 return "Hello,".$this->name."!<br/>"; }}$WBlog = new Person('WBlog');echo $WBlog;//直接输出对象引用则自动调用了对象中的__toString()方法?>
2、__call($funcname,$args)
当类调用一个不存在的函数时会自动调用,参数有两个$funcname为不存在的方法的函数名,$args为该函数的参数
<?phpclass Person{ private $name = ""; function __construct($name = ""){ $this->name = $name; }function __call($funcname,$args){echo "你所调用的函数:$funcname(参数:<br />";var_dump($args);echo ")不存在!";}}$WBlog = new Person('WBlog');$WBlog->funcA(1,2,3,4,5,6);?>3、__clone()
当复制一个类时,复制出来的类会自动调用此方法,此方法相当于复制出来的类的构造函数__construct(),如果在__clone中使用$this来获取属性,$this指的时复制出来的类,而不是原本的类
<?phpclass Person{ private $name = ""; function __construct($name = ""){ $this->name = $name; }function __clone(){$this->name = "李四";//将name重新赋值为李四$this指的是复制出来的类$p1}function say(){echo "你好我是{$this->name}<br>";}}$WBlog = new Person('WBlog');$p1 = clone $WBlog;//复制出一个新的类,__clone自动调用了$WBlog->say();$p1->say();?>
这个函数只能在类外使用,当我们在一个文件里面要使用到别的类的时候,这个类就会自动执行,这样可以减少代码量并且提高写代码的速度
test.php
<?phpfunction __autoload($classname){echo $classname;include($classname.'.php');}class Person{ private $name = ""; function __construct($name = ""){ $this->name = $name; }function __clone(){$this->name = "李四";//将name重新赋值为李四$this指的是复制出来的类$p1}function say(){echo "你好我是{$this->name}<br>";}}$one = new One();?>
One.php
<?phpclass One{function __construct(){echo "1111111111111111";}}?>
5、__sleep()与_weakup()
__sleep()是在一个对象串行化的时候调用的函数,这个函数可以使得串行化的时候可以部分串行化
__weakup()则是一个对象反串行化时调用的函数。
例如下面有一个例子。
Person类
<?phpclass Person{ public $name = "";public $age = "";public $word = ""; function __construct($name,$age,$word){ $this->name = $name;$this->age = $age;$this->word = $word; }function say(){echo "你好我是{$this->name}<br>我的年龄是{$this->age}<br>我的工作是{$this->word}";}}?>write类//将person类串行化保存成一个文本
<?phpfunction __autoload($className){include $className.'.php';}$p = new Person("张三",10,"程序猿");$str = serialize($p);//将$p这个类串行化file_put_contents("db.txt",$str);?>
read类//把文本反串行化为一个类
<?phpfunction __autoload($className){include $className.'.php';}$str = file_get_contents("db.txt");//从文件中读取出串行化后的数据$p = unserialize($str);//将$p这个类反串行化$p->say();/*输出你好我是张三我的年龄是10我的工作是程序猿*/?>
如果我们想只保存姓名和年龄不想保存职业,那么我们可以使用__sleep()进行处理
增加__sleep后的Person类
<?phpclass Person{ public $name = "";public $age = "";public $word = ""; function __construct($name,$age,$word){ $this->name = $name;$this->age = $age;$this->word = $word; }function say(){echo "你好我是{$this->name}<br>我的年龄是{$this->age}<br>我的工作是{$this->word}";}function __sleep(){return array("name", "age");}}?>最后read()只会输出
你好我是张三
我的年龄是10
我的工作是
如果我们想read输出的时候年龄增加一岁
<?phpclass Person{ public $name = "";public $age = "";public $word = ""; function __construct($name,$age,$word){ $this->name = $name;$this->age = $age;$this->word = $word; }function say(){echo "你好我是{$this->name}<br>我的年龄是{$this->age}<br>我的工作是{$this->word}";}function __sleep(){return array("name", "age");}function __wakeup(){$this->age += 1;}}?>最后read输出的结果
你好我是张三
我的年龄是10
我的工作是
0 0
- php中的魔术函数使用
- php中的魔术函数以及魔术常量
- PHP中的Magic Methods (魔术函数)
- php面向对象中的魔术函数
- PHP中的那些魔术师--魔术函数、常量
- PHP中的魔术方法和魔术常量简介和使用
- PHP 魔术函数、魔术常量
- PHP魔术函数
- PHP魔术函数集锦
- PHP魔术函数集锦
- php 魔术函数使用说明
- PHP魔术函数简介
- PHP手册-魔术函数
- PHP魔术函数
- PHP魔术函数
- PHP魔术函数
- php 魔术函数总结
- php魔术函数__autoload
- Android中实现推送方式的基础知识及相关解决方案
- Android内存泄漏分析大全
- 一个简单实用的ini解析算法
- css Hack
- LeetCode Distinct Subsequences
- php中的魔术函数使用
- 第二周上机实践项目 项目4-用循环求π
- Android开发之SQLite数据库
- STM32出现HardFault_Handler 原因及处理方法整理
- iOS Socket TCP编程-C语言版
- 调优 Nginx
- Zookeeper - 部署篇
- Spark Streamning 程序调试
- 周巍的第一次上机实验