魔术方法复习

2014-9-2 10:08:00 NotePad++ By jiancaigege 飞鸿影~
=========================

1、__construct()
构造方法
用于类实例化时自动运行的方法
常用于初始化成员属性值等

2、__destruct()
析构函数
用于类销毁时自动运行的方法
常用语销毁资源、关闭资源等

3、__set($param,$value)
用于给对象中非公有的成员属性设置值时自动调用的方法
例如:

public function __set($param,$value){
  $this->$param=$value;
}

4、__get($param)
用于获取对象中非公有的成员属性值时自动调用的方法
例如:

public function __get($param){
  return $this->$param;
}

5、__isset()
用于测试对象中非公有属性值时自动调用的方法

6、__unset()
用于销毁对象中非公有属性值时自动调用的方法

7、__toString()
当试图直接echo对象时自动调用的方法
示例:

public function __toString(){
  echo "这是一个测试类.";
}

8、__call()
当试图调用对象中不存在的方法时自动调用的方法
示例:

public function __call($funname,$args){
  echo "您调用的方法{$funname}不存在.参数为数组{$args}";
}

9、__clone()
在克隆对象时,对象里有子对象或资源时,此时需要加上这个方法,否则会复制不完整
当然,我们也可以在该方法中添加trigger_error('error',E_USER_ERROR);或者直接设置为private防止克隆

10、__sleep()
对象串行化(serialize)时,如果类中有子对象或资源被调用;
这时候我们需要使用该方法来进行提交未提交的数据,或类似的清理操作;
例如保存数据、关闭一些资源等
示例:(串行化时保存连接数据库需要的数据)

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( 'host' , 'username' , 'password' , 'db' );
}

11、__wakeup()
对象反串行化(unserialize)时,恢复串行化前的一些状态,例如重新建立数据库连接,或执行其它初始化操作
示例:(上例中,我们需要自动恢复数据库连接)

public function __wakeup (){
  $this -> connect ();
}

12、__autoload(string $class_name)
用于自动加载需要的类文件
注意:该方法用于类之外
示例:

function __autoload($classname){
$name=$classname.".class.php";
if(file_exists($name)){
require($name);
echo "**自动加载了<font color='red'>".$name."</font>类<br>";
}else{
die("<font color='red'>".$name."</font>类不存在!");
}
} $m=new DbMysql("stu");//此时会自动加载当前目录中DbMysql.class.php以及DbMysql.class.php引用或继承的父类文件
//$m=new DbMysqli("stu");//此时会自动加载当前目录中DbMysqli.class.php
//$m=new DbSqlite("stu");//此时会自动加载当前目录中DbSqlite.class.php

PHP面向对象之魔术方法复习的更多相关文章

  1. Python 面向对象(三) 魔术方法

    __getitem__ 在对实例或对象使用索引访问时调用,self[key]__dir__ 收集当前模块的信息,包括继承自其它基类(包括object类)的属性和方法 __new 定义如何创建实例__i ...

  2. php面向对象高级-魔术方法与迭代器

    1,魔术方法__set与__get, __call >这些魔术方法,将在相关的属性或者方法不存在时调用 >函数原型 .function __set( $property, $value ) ...

  3. Python - 面向对象编程 - 魔术方法(双下划线方法)

    什么是魔术方法 在Python中,所有以 __ 双下划线包起来的方法,都统称为 Magic Method 魔术方法,也叫双下划线方法 有哪些重要的魔术方法? __new__ https://www.c ...

  4. Python面向对象之魔术方法

    __str__ 改变对象的字符串显示.可以理解为使用print函数打印一个对象时,会自动调用对象的__str__方法 class Student: def __init__(self, name, a ...

  5. 十八、Python面向对象之魔术方法

    1.类的比较 class A(object): def __init__(self,value): self.value = value def __eq__(self,other): return ...

  6. PHP面向对象的魔术方法.png(不间断更新)

  7. php7魔术方法

    抽空把php7的魔术方法复习一下,大致如下 __constract:在实例化一个类时,触发 __destruct:在一个实例对象被销毁的时候触发 __set(string $name , mixed ...

  8. 前端学PHP之面向对象系列第二篇——魔术方法

    × 目录 [1]构造方法 [2]析构方法 [3]不可访问属性[4]对象复制[5]字符串[6]对象不存在[7]自动加载类[8]串行化[9]函数调用 前面的话 php在面向对象部分有很多相关的魔术方法,这 ...

  9. PHP面向对象常见的关键字和魔术方法

    在PHP5的面向对象程序设计中提供了一些常见的关键字,用来修饰类.成员属性或成员方法,使他们具有特定的功能,例如final.static.const等关键字.还有一些比较实用的魔术方法,用来提高类或对 ...

随机推荐

  1. C# "=="、Equals()、ReferenceEquals()区别

    对于值类型: ; ; 1.== 比较的是值内容 2.age2.Equals(age1) = false; Equals比较前需要转换成同类型,age1(int型)需显示转换成byte型 3.age1. ...

  2. SQLServer : 几个特殊函数(RAND,CHECKSUM, NEWID)

    这一篇我们来捋捋在T-SQL中可能会用到的几个特殊的函数 1. 随机数: RAND 返回从 0 到 1 之间的随机 float 值. 语法: RAND ( [ seed ] ) seed 提供种子值的 ...

  3. android免root兼容所有版本ui调试工具

    SwissArmyKnife是什么 SwissArmyKnife 是一款方便调试android UI的工具,可以兼容所有android版本,不需要root权限.可以直接在android手机屏幕上显示当 ...

  4. vbox 虚拟机共享文件夹 debian

    主机64位windows7 虚拟机Debian 8 64位 注意:在网络更新时,可能需要修改 etc/apt/sources.list 文件,把前几条从CD更新删除掉,这样就会从网络更新 1.vbox ...

  5. Win7 64位 VS2015环境编译cegui-0.8.5

    首先是去官网下载源码与依赖库 http://cegui.org.uk/ 然后得提一下,编译DX11版本带Effects11框架的话会有问题,也就是默认情况编译有问题,这是因为VS2015升级后编译器对 ...

  6. JAVA里面的IO流(一)分类2(节点流和处理流及构造方法概要)

    IO流根据处理对象的不同分为节点流和处理流. 直接对文件进行处理的流为节点流: 对流进行包装从而实现对文件的优化处理的流为处理流. 节点流类型: 可以看出,节点流主要分这几大类: 文件流 文件流构造方 ...

  7. 使用JSON Schema来验证接口数据

    最近在做一些关于JSON Schema的基建,JSON Schema可以描述一个JSON结构,那么反过来他也可以来验证一个JSON是否符合期望的格式. 如果之前看我写的<使用joi来验证数据模型 ...

  8. 第8章 NAND FLASH控制器

    8.1 NAND Flash介绍和NAND Flash控制器使用 NAND Flash在嵌入式系统中的地位与PC上的硬盘类似 NAND Flash在掉电后仍可保存 8.1.1 Flash介绍 有NOR ...

  9. Eclipse - Failed to load the JNI shared Library (JDK)

    When I try opening Eclipse, a pop-up dialog states: Failed to load the JNI shared library "C:/J ...

  10. Activity类生命周期

    Activity通常就是一个单独的屏幕.每一个活动都被实现为一个独立的类,并且从活动基类中继承而来,活动类将会显示由视图控件组成的用户接口,并对事件作出响应. 从开发者角度看,Activity是一个J ...