PHP面向对象之魔术方法复习
魔术方法复习
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面向对象之魔术方法复习的更多相关文章
- Python 面向对象(三) 魔术方法
__getitem__ 在对实例或对象使用索引访问时调用,self[key]__dir__ 收集当前模块的信息,包括继承自其它基类(包括object类)的属性和方法 __new 定义如何创建实例__i ...
- php面向对象高级-魔术方法与迭代器
1,魔术方法__set与__get, __call >这些魔术方法,将在相关的属性或者方法不存在时调用 >函数原型 .function __set( $property, $value ) ...
- Python - 面向对象编程 - 魔术方法(双下划线方法)
什么是魔术方法 在Python中,所有以 __ 双下划线包起来的方法,都统称为 Magic Method 魔术方法,也叫双下划线方法 有哪些重要的魔术方法? __new__ https://www.c ...
- Python面向对象之魔术方法
__str__ 改变对象的字符串显示.可以理解为使用print函数打印一个对象时,会自动调用对象的__str__方法 class Student: def __init__(self, name, a ...
- 十八、Python面向对象之魔术方法
1.类的比较 class A(object): def __init__(self,value): self.value = value def __eq__(self,other): return ...
- PHP面向对象的魔术方法.png(不间断更新)
- php7魔术方法
抽空把php7的魔术方法复习一下,大致如下 __constract:在实例化一个类时,触发 __destruct:在一个实例对象被销毁的时候触发 __set(string $name , mixed ...
- 前端学PHP之面向对象系列第二篇——魔术方法
× 目录 [1]构造方法 [2]析构方法 [3]不可访问属性[4]对象复制[5]字符串[6]对象不存在[7]自动加载类[8]串行化[9]函数调用 前面的话 php在面向对象部分有很多相关的魔术方法,这 ...
- PHP面向对象常见的关键字和魔术方法
在PHP5的面向对象程序设计中提供了一些常见的关键字,用来修饰类.成员属性或成员方法,使他们具有特定的功能,例如final.static.const等关键字.还有一些比较实用的魔术方法,用来提高类或对 ...
随机推荐
- selenium-pageobject设计模式
from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom time import sleepfrom ...
- 解决php中json_decode的异常JSON_ERROR_CTRL_CHAR
该字符中含了ASCII码ETB控制符,即\x17导致json解析失败 (截图中显示ETB是因为用了Sublime text2) 解决方法如下:去掉0-31的控制符再进行decode $result = ...
- __attribute__((packed))详解
1. __attribute__ ((packed)) 的作用就是告诉编译器取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐,是GCC特有的语法.这个功能是跟操作系统没关系,跟编译器有关 ...
- 丙申年把真假美猴王囚禁在容器中跑 ASP.NET Core 1.0
var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...
- [LeetCode] 452 Minimum Number of Arrows to Burst Balloons
There are a number of spherical balloons spread in two-dimensional space. For each balloon, provided ...
- 【转】Python中的赋值、浅拷贝、深拷贝介绍
这篇文章主要介绍了Python中的赋值.浅拷贝.深拷贝介绍,Python中也分为简单赋值.浅拷贝.深拷贝这几种"拷贝"方式,需要的朋友可以参考下 和很多语言一样,Python中 ...
- 学习django之正则表达式re模块
re(regular expression)模块 正则表达式(regular expression)主要功能是从字符串(string)中通过特定的模式(pattern),搜索想要找到的内容. 一.re ...
- hibernate的缓存机制
hibernate提供两种缓存:一级缓存和二级缓存 一.一级缓存:也就是Session缓存(又称作事务缓存):Hibernate内置的,不能卸除. 在同一个Session里面,第一次调用get()方法 ...
- ios页面保存至桌面logo大小
<link rel="apple-touch-icon" href="touch-icon-iphone.png" /> <!--57*57- ...
- 张洋:浅析PageRank算法
本文引自http://blog.jobbole.com/23286/ 很早就对Google的PageRank算法很感兴趣,但一直没有深究,只有个轮廓性的概念.前几天趁团队outing的机会,在动车上看 ...