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 ...
随机推荐
- JSP内置对象——application,page,pageContext,config,Exception
application对象application对象实现了用户数据的共享,可存放全局变量.application开始于服务器的启动,终止于服务器的关闭.在用户的前后链接或不同用户之间的连接中,可以对a ...
- 第一个内核模块hello world
1.源码树的下载和编译(只是研究内核模块的话,应该不需要源码树的) 下载很简单,压缩包解压 编译:make menuconfig make bzImage -j4 参考 2. cd /usr/src ...
- Android下在onCreate中获取控件的宽度和高度(通过回调)
有时候需要在onCreate方法中知道某个View组件的宽度和高度等信息, 而直接调用View组件的getWidth().getHeight().getMeasuredWidth().getMeasu ...
- 《从零开始学Swift》学习笔记(Day 64)——Cocoa Touch设计模式及应用之目标与动作
原创文章,欢迎转载.转载请注明:关东升的博客 目标(Target)与动作(Action)是iOS和OS X应用开发的中事件处理机制. 问题提出 如图所示是一个ButtonLabelSample案例 ...
- 用Dialog 做自定义动画,加播放监听
final Dialog customDialog = new Dialog(this); customDialog.setTitle(R.string.attention); customDialo ...
- java读代码步骤
一.读代码的步骤 1.知道代码时用什么IDE开发的 2.将代码导入到IDE 3.连接数据库 A)连接到测试数据库 B)有sql脚本,在本地创建一个数据库,执行脚本,建立数据结构和导入数据. 4.尝试运 ...
- Windows7 x64系统下安装Nodejs并在WebStorm下搭建编译less环境
1. 打开Nodejs官网http://www.nodejs.org/,点“DOWNLOADS”,点64-bit下载“node-v0.10.33-x64.msi”. 2. 下载好后,双击“node-v ...
- 巨蟒python全栈开发flask11项目开始3
1.多玩具遥控&&websocket回锅 2.绑定玩具时添加好友的最终逻辑 3.消息&&好友列表 4.chat聊天&&对话窗口 1.多玩具遥控& ...
- Java Filter过滤xss注入非法参数的方法
http://blog.csdn.NET/feng_an_qi/article/details/45666813 Java Filter过滤xss注入非法参数的方法 web.xml: <filt ...
- idea破解方法
1.http://idea.lanyus.com/ 下载破解文件 2.将下载的JetbrainsIdesCrack-3.4-release-enc.jar破解文件放在idea安装目录下的bin中: 3 ...