php面向对象类中常用的魔术方法
1、__construct():构造方法,当类被实例化new $class时被自动调用的方法,在类的继承中可以继承与覆盖该方法,例:

//__construct()
class construct{
public function __construct(){
$this->var = "this is var";
}
}
class con2 extends construct{
public function __construct(){
$this->var = "this is var2";
}
}
$con2 = new con2;
echo $con2->var;

3、__destruct():当对象销毁或者不再使用时(页面运行完),自动调用这个方法,例:

class construct{
public function __construct(){
$this->var = "this is var";
}
public function __destruct(){
echo 'close';
}
}
$con = new construct;
//或者最常用的关闭资源
class destruct{
public function __construct(){
$this->logfile_handle = fopen('/tmp/log.txt',w);
}
public function __destruct(){
fclose($this->logfile_handle);
}
}

4、__toString():该方法用于一个类被当成字符串时应怎么样回应,也就是echo $class时返回的内容是什么,如果没有__toString()魔术方法时,将会返回一个E_RECOVERABLE_ERROR级别的致命错误。
例:

<?php
class TestClass{
public $foo;
public function __construct($foo){
$this->foo = $foo;
}
public function __toString(){
return $this->foo;
} }
$class = new TestClass('Hello');
echo $class;//Hello
?>

5、__invoke():该魔术方法用于类被当作函数使用时,自动调用该方法,但是...__invoke()魔术方法只在PHP5.3.0以上才有效;例

//__invoke() PHP5.3.0以上版本有效
class CallableClass{
function __invoke($x){
var_dump($x);
}
}
$obj = new CallableClass;
$obj(5);
var_dump(is_callable($obj));//true

6、__get()与__set():从一个难以访问的属性读取数据是自动调用__get()魔术方法,从一个难以访问的熟悉赋值的时候自动调用__set()魔术方法,难以访问包括(私有属性,未定义属性、没有初始化的属性)例:

//__get() __set()
class demoClass{
private $a;
private function __get($name){
return 'this var not exist';
}
private function __set($name,$value){
echo 'this var value not exist';
}
}
$demo = new demoClass();
var_dump($demo->a);//调用__get()方法
$demo->a = 1;//调用__set()方法

7、__call():该方法在范围类中不存在的方法时自动调用的方法,参数有两个;例:

//__call()
class funClass{
public function __call($name,$arg){
echo $name.'function not exist';
}
}
$fun = new funClass();
$fun->aa();//function not exist

8、__sleep()和__wakeup:这两个魔术方法是在对象序列化serialize()和解序列化unserialize()自动调用的方法:例

//__sleep __wakeup 简单实例
class sleepClass{
public $myContent;
public function __construct($string){
$this->myContent = $string;
}
public function __sleep(){
$this->myContent = "this is mimi";
return array('myContent');
}
public function __wakeup(){
echo 'aaa';
}
}
$sleep = new sleepClass('i love bb');
$ser = serialize($sleep);//this is mimi
unserialize($ser);//aaa
//或者 常用实例
class Connection {
protected $link;
private $server, $username, $password, $db;
public function __construct($server, $username, $password, $db)
{
$this->server = $server;
$this->username = $username;
$this->password = $password;
$this->db = $db;
$this->connect();
}
private function connect()
{
$this->link = mysql_connect($this->server, $this->username, $this->password);
mysql_select_db($this->db, $this->link);
}
public function __sleep()
{
return array('server', 'username', 'password', 'db');
}
public function __wakeup()
{
$this->connect();
}
}
$con = new Connection('127.0.0.1','root','','mythinkcom');
echo serialize($con);

9、__clone():$obj2 = clone $obj1与$obj2 = $obj1的区别是前者有两块内存地址,而后者只有一块内存地址。

class cloneClass{
public $var = 'aa';
}
$clone = new cloneClass;
$clone2 = clone $clone;
echo $clone->var;
echo $clone2->var;
php面向对象类中常用的魔术方法的更多相关文章
- PHP中常用的魔术方法
我们在PHP中经常用到魔术方法,像构造方法,析构方法等等魔术变量,下面总结一下一些常用的魔术变量: __construct(),__destruct(),__clone(),__autoload(), ...
- PHP面向对象常见的关键字和魔术方法
在PHP5的面向对象程序设计中提供了一些常见的关键字,用来修饰类.成员属性或成员方法,使他们具有特定的功能,例如final.static.const等关键字.还有一些比较实用的魔术方法,用来提高类或对 ...
- python: 面向对象:类和对象调用类中的变量和方法
一. 面向对象初识 我们在生活中做事都是面向过程的,前面实现一些基本逻辑功能代码也是用面向过程的语句实现的,后来学了函数,把这些功能又装到了函数里.但用面向过程的方法去写程序,只能实现一个功能,我们要 ...
- 第8.34节 《Python类中常用的特殊变量和方法》总结
本章介绍了Python类中常用的特殊变量和方法,这些特殊变量和方法都有特殊的用途,是Python强大功能的基石之一,许多功能非常有Python特色.由于Python中一切皆对象,理解这些特殊变量和方法 ...
- 第8章 Python类中常用的特殊变量和方法目录
第8章 Python类中常用的特殊变量和方法 第8.1节 Python类的构造方法__init__深入剖析:语法释义 第8.2节 Python类的__init__方法深入剖析:构造方法案例详解 第8. ...
- VB的一些项目中常用的通用方法-一般用于验证类
1.VB的一些项目中常用的通用方法: ' 设置校验键盘输入值,数字 Public Function kyd(key As Integer) As Integer Dim mychar mychar = ...
- PHP 中 16 个魔术方法详解
PHP 中 16 个魔术方法详解 前言 PHP中把以两个下划线__开头的方法称为魔术方法(Magic methods),这些方法在PHP中充当了举足轻重的作用. 魔术方法包括: __constru ...
- jQuery中常用的函数方法
jQuery中常用的函数方法总结 Ajax处理 load(url,[data],[callback]) url (String) : 待装入 HTML 网页网址. data (Map) : (可选) ...
- 2019-2-20C#开发中常用加密解密方法解析
C#开发中常用加密解密方法解析 一.MD5加密算法 我想这是大家都常听过的算法,可能也用的比较多.那么什么是MD5算法呢?MD5全称是 message-digest algorithm 5[|ˈmes ...
随机推荐
- kotlin 遇到的问题
转载请表明 https://i.cnblogs.com/EditPosts.aspx?opt=1 从5月18号goole正式公布用kotlin做为android的新语言,做为android也很庆幸可以 ...
- 递归删除资源树 Ztree
前言 最近项目里有这么一个需求:现在有一个用Ztree编写的资源树,当删除资源树的某个节点时,则将此节点下面的所有节点全部删除,这里显然就用到了递归:若此节点被删除后无其它的兄弟节点了,我们还需要将其 ...
- 用Java向数据库中插入大量数据时的优化
使用jdbc向数据库插入100000条记录,分别使用statement,PreparedStatement,及PreparedStatement+批处理3种方式进行测试: public void ex ...
- Fiddler实现手机抓包——小白入门 - 做一个不动声色的大人
手机用fiddler抓包 电脑最好是笔记本,这样能和手机保持统一局域网内:其他不多说,直接说步骤了. 一.对PC(笔记本)参数进行配置 1. 配置fiddler允许监听到https(fiddle ...
- MYSQL常用命令(转载)
1.导出整个数据库 mysqldump -u 用户名 -p --default-character-set=latin1 数据库名 > 导出的文件名(数据库默认编码是latin1)mysqldu ...
- 浏览器中使用 ES6 import
html 中的 head 标签引入: <script src="test.js" type="module"></script> tes ...
- quartz 调度启动失败,with (updlock,rowlock)
原因是driverDelegateClass配置错误. org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTXorg.q ...
- CSS样式表、JS脚本加载顺序与SpringMVC在URL路径中传参数与SpringMVC 拦截器
CSS样式表和JS脚本加载顺序 Css样式表文件要在<head>中先加载,这样网页显示时可以第一次就渲染出正确的布局和样式,网页就不会闪烁,或跳变 JS脚本尽可能放在<body> ...
- Jsp 公用标签库
<%@ page language="java" pageEncoding="UTF-8"%> <%@ taglib prefix=" ...
- Java switch 详解
switch 语句由一个控制表达式和多个case标签组成. switch 控制表达式支持的类型有byte.short.char.int.enum(Java 5).String(Java 7). swi ...