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面向对象类中常用的魔术方法的更多相关文章

  1. PHP中常用的魔术方法

    我们在PHP中经常用到魔术方法,像构造方法,析构方法等等魔术变量,下面总结一下一些常用的魔术变量: __construct(),__destruct(),__clone(),__autoload(), ...

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

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

  3. python: 面向对象:类和对象调用类中的变量和方法

    一. 面向对象初识 我们在生活中做事都是面向过程的,前面实现一些基本逻辑功能代码也是用面向过程的语句实现的,后来学了函数,把这些功能又装到了函数里.但用面向过程的方法去写程序,只能实现一个功能,我们要 ...

  4. 第8.34节 《Python类中常用的特殊变量和方法》总结

    本章介绍了Python类中常用的特殊变量和方法,这些特殊变量和方法都有特殊的用途,是Python强大功能的基石之一,许多功能非常有Python特色.由于Python中一切皆对象,理解这些特殊变量和方法 ...

  5. 第8章 Python类中常用的特殊变量和方法目录

    第8章 Python类中常用的特殊变量和方法 第8.1节 Python类的构造方法__init__深入剖析:语法释义 第8.2节 Python类的__init__方法深入剖析:构造方法案例详解 第8. ...

  6. VB的一些项目中常用的通用方法-一般用于验证类

    1.VB的一些项目中常用的通用方法: ' 设置校验键盘输入值,数字 Public Function kyd(key As Integer) As Integer Dim mychar mychar = ...

  7. PHP 中 16 个魔术方法详解

    PHP 中 16 个魔术方法详解   前言 PHP中把以两个下划线__开头的方法称为魔术方法(Magic methods),这些方法在PHP中充当了举足轻重的作用. 魔术方法包括: __constru ...

  8. jQuery中常用的函数方法

    jQuery中常用的函数方法总结 Ajax处理 load(url,[data],[callback]) url (String) : 待装入 HTML 网页网址. data (Map) : (可选) ...

  9. 2019-2-20C#开发中常用加密解密方法解析

    C#开发中常用加密解密方法解析 一.MD5加密算法 我想这是大家都常听过的算法,可能也用的比较多.那么什么是MD5算法呢?MD5全称是 message-digest algorithm 5[|ˈmes ...

随机推荐

  1. 在线制作logo

    logoko:http://www.logoko.com.cn/ markmarker:http://emblemmatic.org/markmaker/#/ logomaker:https://lo ...

  2. phpredis 中文手册和redis 教程

    phpredis 中文手册  :   http://www.cnblogs.com/zcy_soft/archive/2012/09/21/2697006.html 手册: http://www.cn ...

  3. oracle的存储过程如何返回结果集

    CREATE OR REPLACE PACKAGE pkg_test AS     TYPE myrctype IS REF CURSOR;       PROCEDURE get (p_id NUM ...

  4. 【BZOJ2067】[Poi2004]SZN 二分+树上贪心

    [BZOJ2067][Poi2004]SZN Description String-Toys joint-stock 公司需要你帮他们解决一个问题. 他们想制造一个没有环的连通图模型. 每个图都是由一 ...

  5. PHP mysql 扩展库 操作mysql数据库步骤

    一.mysql 扩展库操作mysql数据库步骤如下: 1.获取连接 2.选择数据库 3.设置操作编码 4.发送指令(ddl数据定义/dml数据操作/dql数据查询/dtl数据事务控制) 5.接收返回的 ...

  6. LeetCode 笔记系列11 First Missing Positive [为什么我们需要insight]

    题目: Given an unsorted integer array, find the first missing positive integer. For example,Given [1,2 ...

  7. 160323、理解Java虚拟机体系结构

    今天看到一篇文章,觉得写得不错,特拿来跟大家分享一下 1 概述 众所周知,Java支持平台无关性.安全性和网络移动性.而Java平台由Java虚拟机和Java核心类所构成,它为纯Java程序提供了统一 ...

  8. IDEA安装Python环境,并加入Anaconda环境

    为什么做这个事情? 1.首先,Anaconda中已经有各种科学计算环境,包括后面安装的tensorflow 2.通过IDEA中配置就达到了Scala.Python.Java同时运行的目的. Intel ...

  9. 隐藏UITableView当没有数据或数据不够的时候出现的分割线.

    在没有分割先的情况下,添加如下方法,当实例化tableview的时候调用该方法. - (void)setExtraCellLineHidden: (UITableView *)tableView{ U ...

  10. Abp Uow 设计

    初始化入口 在AbpKernelModule类中,通过UnitOfWorkRegistrar.Initialize(IocManager) 方法去初始化 /// <summary> /// ...