2019-07-23 php魔术方法
本文对一些php中的魔术方法进行总结,魔术方法顾名思义就是具备神奇功能的方法(function)。魔术方法通常在某些特定情况下自动触发,不能用实例化变量名->方法名()来主动触发。不同的魔术方法有不同的触发情况,魔术方法都以”__”两个下划线开头,一定要注意是“两个下划线”,如果写成一个下划线,不报错,但也不会被触发。
1.构造方法 __construct(参数){ }
该魔术方法,在实例化类时自动触发,不能主动触发。一般用于执行某些初始化任务,在一个类中,只能声明一个构造方法,下面我们用构造方法赋初始值。
class Person{
var $name;
var $age;
var $sex;
//构造方法
function __construct($name,$age,$sex)
{
//赋值
$this->name = $name;
$this->age = $age;
$this->sex = $sex;
}
function say()
{
echo "My name is ".$this->name.". I am ".$this->age." years old.".$this->sex." in sex.";
}
}
//在实例化时传入参数 执行构造方法
$obj = new Person("ZhangSan","20","male");
//再调用say()方法
$obj->say();
最后的输出结果是:My name is ZhangSan. I am 20 years old.male in sex.
从上面的例子可以看出,构造方法在类被实例化时主动触发,并可以传入参数。
以下几种情况适合放在构造方法内:
①数据库类
使用数据库之前,必须先连接数据库。我们可以将连接数据库的代码放在构造方法里。
②分页类
每次计算分页之前,必须获取当前页数、计算总页数,就可以放在构造方法里。
③上传类
必须先获取上传的文件 $file = $_FILES['form_name'],它就可以放在构造方法里。
④绘图类
必须先创造一个画板,这个过程也可以放在构造方法。
2.析构方法 __destruct( ){ }
析构函数允许在销毁一个类之前执行的一些操作或完成一些功能,比如说关闭文件, 释放结果集等,析构函数会在到某个对象的所有引用都被删除或者当对象被显示销毁时执行,也就是对象在内存中被销毁前调用析构函数。与构造函数的名称类似, 一个类的析构函数名称必须是__destruct( )。析构函数不能带有任何参数。
下面我们来看一下析构函数的具体应用:
class Student{
function say()
{
echo "I am a student. ";
}
//析构方法
function __destruct()
{
echo "I am so happy.";
}
}
//实例化类
$obj_s = new Student();
//调用say()方法
$obj_s->say();
最后的输出结果是:I am a student. I am so happy.
可以看到,我们并没有主动去调用析构方法,但却输出了析构方法的结果。是因为在调用类方法结束后会自动释放内存。在释放内存前,主动触发了析构函数。
2019-07-23 php魔术方法的更多相关文章
- PHP 中的 9 个魔术方法
这个标题有点牵强因为php有不只9种魔术方法, 但是这些将会引导你使用php魔术方法一个好的开始.它可能魔幻,但是并不需要魔杖. 这些'魔术'方法拥有者特殊的名字,以两个下划线开始,表示这些方法在ph ...
- [Python3 填坑] 014 类的常用魔术方法举例
目录 1. print( 坑的信息 ) 2. 开始填坑 2.1 __init__() 2.2 __new__() 2.3 __call__() 2.4 __str__() 2.5 __repr__() ...
- PHP面向对象常见的关键字和魔术方法
在PHP5的面向对象程序设计中提供了一些常见的关键字,用来修饰类.成员属性或成员方法,使他们具有特定的功能,例如final.static.const等关键字.还有一些比较实用的魔术方法,用来提高类或对 ...
- PHP中的常用魔术方法
魔术方法: 是指某些情况下,会自动调用的方法,称为魔术方法 php面向对象中,提供了这几个魔术方法,他们的特点都是 以双下划线__开头的 __construct() 构造方法 __destruct( ...
- php预定义变量,超全局变量,魔术方法,特殊函数变量使用
<?php /* * 本代码全部为测试函数代码,部分注释和写实例 * * 修改php.ini variables_order=”EGPCS” * 请注意$_REQUEST在优先级传参的时候会造成 ...
- PHP 魔术方法之__set__get__unset,__isset,__call
<?php /*** 魔术方法: 是指某些情况下,会自动调用的方法,称为魔术方法 PHP面向对象中,提供了这几个魔术方法, 他们的特点 都是以双下划线__开头的 __construct(), _ ...
- python类:magic魔术方法
http://blog.csdn.net/pipisorry/article/details/50708812 魔术方法是面向对象Python语言中的一切.它们是你可以自定义并添加"魔法&q ...
- php魔术方法__get(),__set(),__isset()的使用
1.魔术方法__get(),__set(),__isset()类: <?php /** * @purpose: 魔术方法 __get() , __set(), __isset() 的使用 * U ...
- (转)python类:magic魔术方法
原文:https://blog.csdn.net/pipisorry/article/details/50708812 版权声明:本文为博主皮皮http://blog.csdn.net/pipisor ...
- PHP的魔术方法
PHP中把以两个下划线__开头的方法称为魔术方法(Magic methods) 魔术方法包括: __construct(),类的构造函数 __destruct(),类的析构函数 __call(),在对 ...
随机推荐
- leetcode 85. 最大矩形
题目描述: 给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积. 思路分析: 这题是之前那道最大正方形的进阶,同样是利用dp来求解.通过逐行去计算最大矩形,即优化的 ...
- hyper-v显示分辨率如何自动调整
打开文件/etc/default/grub 找到GRUB_CMDLINE_LINUX_DEFAULT所在行,在最后加上 video=hyperv_fb:[分辨率],比如我想要的分辨率是1600×900 ...
- Spring Boot使用Html
1.引入模板thymeleaf <dependency> <groupId>org.springframework.boot</groupId> <artif ...
- tornado多进程模式不同进程写不同日志
#coding: utf- ''' Author: Time: Target: ''' import logging import logging.handlers import os import ...
- [转][c++]关于构造函数不能有返回类型的错误
转自:https://blog.csdn.net/sky_freebird/article/details/6687892 构造函数不能有返回类型,可是自己定义的构造函数本来就没写返回类型啊. 最后发 ...
- python开源项目聚合推荐【1】
******************************************************* 01项目名:unimatrix 功能介绍:Python模拟“黑客帝国”影片中的终端动画脚 ...
- 执行redis命令redis-trib.rb查看集群信息报错cannot load such file -- redis (LoadError)
问题描述: 在执行redis-trib.rb命令查看集群状态的时候,报错: [aiprd@hadoop1 ~]$ redis-trib.rb check Traceback (most recent ...
- lamda表达式求最小值
//取最小设置金额的列 var minList = LsList.OrderBy(n=>n.Price).First(); //取最小设置金额的值 var minValue = LsList.S ...
- 006-tomcat 多实例安装、appBase和docBase、Context说明
一.多实例部署 主要是为了充分利用服务器资源,并且可以交叉部署应用.主要做法可以有使用docker部署,多实例部署. 多实例多应用:多个 Tomcat 部署多个不同的项目.这种模式在服务器资源有限,或 ...
- Spring Cloud 微服务技术整合
微服务架构风格是一种使用一套小服务来开发单个应用的方式途径,每个服务运行在自己的进程中,并使用轻量级机制通信,通常是HTTP API,这些服务基于业务能力构建,并能够通过自动化部署机制来独立部署,这些 ...