PHP面向对象 –魔术方法

__construct() 构造函数

__destruct() 析构函数

__sleep()    serialize序列化时调用

__wakeup()  unserialize反序列化时调用

__clone()       检测克隆对象

属性重载的魔术方法:

set,get,sset,unset

__set()          当为不可访问的属性赋值时,会被自动调用 会得到两个参数,当前操作的属性名和属性值!

典型的,__set作用,用于严格控制对象结构,和批处理可以被修改的属性!

__get()

当访问不可访问的属性时,会被自动调用

需要的参数是:一个,为当前操作的属性名

__unset()

在删除一个不可访问的属性时,可以自动被调用!

需要一个参数 当前操作的属性名。

此时就可以利用业务逻辑完成 属性的删除处理!

__isset()

在判断一个不可访问的属性是否存在时,被自动调用

需要一个参数,属性名

注意,此函数需要返回true,或者false,表示属性是否存在:

方法重载的魔术方法:

__call()

当访问一个不可访问的对象方法时,会触发当前的魔术方法!

需要的参数:

2个参数,第一是当前的方法名,第二是调用时使用的实参列表!

典型的作用,

第一, 给出友好的提示

第二, 执行默认操作!

static __callStatic()

与 __call类似,当静态调用一个不可访问的方法时,会自动执行!

魔术方法,magic method

在特定的情况下,会被自动调用的方法,通常负责完成某块独立的功能的方法称之为魔术方法!

特点:

1,需要用户脚本定义,不定义不执行!

2,命名方式都是以__开头!

总结:

__construct

__destruct

__sleep

__wakeup

__set

__get

__isset

__unset

__clone

__call

__callStatic

__autoload()//魔术函数

__invoke()

将一个对象,当作函数调用时,会触发该对象的__invoke()方法,由此方法,就可以调用,没有该方法就不能调用!

回想匿名函数

为什么,匿名函数对象(Closure类对象)可以,但是普通类对象不行?

PHP内置Closure类中有__invoke()方法:__invoke是 php实现匿名函数  不可或缺的部分!

__toString()

转换到字符串的意思!

当将对象当作字符串使用时,会自动调用该对象的魔术方法!

时间: 2024-12-23 08:34:32

PHP面向对象 –魔术方法的相关文章

PHP面向对象魔术方法之__get 和 __set函数

l 基本的介绍 (1) 当我们去使用不可以访问的属性时,系统就会调用__get方法. (2) 不可以访问的属性指的是(1 . 该属性不存在 2. 直接访问了protected或者private属性) (3) 当程序员去给不可以访问的属性直接赋值,系统就会调用__set方法 l 举例说明 需求是: 如果对象有一个成员变量是private.protectd的,我希望在在类的外部通过 : $对象名->变量名的方式来赋值和取值,怎么办? 代码如下 <?php header('content-type:

PHP面向对象魔术方法基本了解

简单介绍 (1) 魔术方法都是系统提供,程序员使用即可. (2) 所有的魔术方法,前面都是以  __ 开头的 _是两个下划线. (3) 我们在自定义函数时,就不要使用 __开头了. (4) 魔术方法是在满足某个条件(一会一个一个的说明)时,有系统自动的调用. 魔术方法一览 原文地址:https://www.cnblogs.com/lsqbk/p/10386437.html

PHP面向对象魔术方法之__call函数

l 基本介绍: (1) 当我们调了一个不可以访问的成员方法时,__call魔术方法就会被调用. (2) 不可以访问的成员方法的是指(1. 该成员方法不存在, 2. 成员方法是protected或者 private) l 需求 我们就是希望,在类的外部直接调用不可访问的成员方法(private , protected). l 案例说明 <?php header('content-type:text/html;charset=utf-8'); //__call魔术方法 class Monk{ pub

python面向对象魔术方法补充

一.描述符 在 面向对象 编程中 定义一个(没有定义方法)类:class person , 在这个类里面,有name,age, heigth, weight,等等属性, 这个类就可以看作一个对 person 的描述符,而具体的实例则是具体的“被描述物”. 而在python中,描述符本质就是一个新式类,在这个新式类中,至少实现了__get__(),__set__(),__delete__()中的一个,这也被称为描述符协议. __get__():调用一个属性时,触发 __set__():为一个属性赋

php面向对象魔术方法

__construct($argv1,$argv2,-) 功能:类的构造方法,作用是初始化对象 参数:任意多个,任意类型 返回值:无 __destruct() 功能:类的析构方法,对象被销毁时被调用,作用是释放内存 参数:无 返回值:无 __get($name) 功能:当程序员试图调用一个未定义或者不可见的成员变量(属性)的时候就会调用该方法,这个时候程序试图调用的成员变量的返回值是该方法的返回值: 参数:$name为试图调用的成员变量的名称,这个参数的传递是PHP自动完成的: 返回值:类型(不

[麦先生]PHP面向对象中常见的魔术方法以及关键字

麦先生引言:在学习php面向对象的编程思想中,我们会遇到很多的能够自动调用的魔术方法,每个魔术方法都有其特定的触发场景,但其根本目的是在于编写和实际使用过程中阻止程序报错而生; 常见的魔术方法有:music=> gusic(根据首字母拼音大写由gusic联想到music)    以及构造,析构方法,以及特殊的关键字fsci -- cats 和 ai 魔术方法                触发场景 <!--gusic---------------------------------------

对php面向对象中魔术方法的认识

<?php//header(charset="utf8");    //echo 'hey 这里是描述我对php 面向对象中各种魔术方法的认识.';/* *魔术方法是在一些特定情况下会自动调用的一些php系统自定义函数 *这些函数都很有个性,他们统一以__两个 _ (下划线)开头. * 下面对于php 中这些常用的魔术方法一些个人认识. **/class demo {    public $name;    public $age; //当实例化这个类,首先会自动调用的方法 __

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

显示目录 目录 [1]构造方法 [2]析构方法 [3]不可访问属性[4]对象复制[5]字符串[6]对象不存在[7]自动加载类[8]串行化[9]函数调用 前面的话 php在面向对象部分有很多相关的魔术方法,这些方法为面向对象实现提供了便利,本文将详细介绍魔术方法 构造方法 大多数类都有一种称为构造函数的特殊方法.当创建一个对象时,它将自动调用构造函数,通常用它执行一些有用的初始化任务 构造函数的声明与其它操作的声明一样,只是其名称必须是两个下划线__construct( ).这是PHP5中的变化:

php面向对象类中常用的魔术方法

php面向对象类中常用的魔术方法 1.__construct():构造方法,当类被实例化new $class时被自动调用的方法,在类的继承中可以继承与覆盖该方法,例: //__construct() class construct{ public function __construct(){ $this->var = "this is var"; } } class con2 extends construct{ public function __construct(){ $