PHP中常用的魔术方法


Posted in PHP onApril 28, 2017

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

__construct(),__destruct(),__clone(),__autoload(),__tostring(),__invoke(),__set(),__get(),__unset(),__isset(),__call(),__callstatic;

1,__constuct()构造函数

通常实例化完一个对象之后,都要对该对象的属性进行初始化!在实例化一个对象的时候,PHP系统会自动的调用一个名字叫作__construct()的方法,我们把这个方法叫作“构造方法”!

其中,构造方法可以没有参数!

<?php

class Stu {

 public $stu_name;
 public $stu_age;

//构造方法,实例化时自动调用
 public function __construct($name,$age){

  $this->stu_name = $name;
  $this->stu_age = $age;
 } 

}

//实例化stu对象
$stu = new Stu('孙悟空','500');

2.__destruct()析构方法

与构造方法是一对,构造方法是在一个对象“出生”的时候由系统自动调用的,而析构方法是在一个对象“消失”的时候由系统自动调用的!

析构方法的名字叫__destruct();注意里面不能有任何的参数!

<?php

//析构方法
public function __destruct(){

}
?>

注意:析构方法是在对象销毁之前调用的!  

作用:

析构方法的作用一般是用来释放该对象所占用的额外的资源,而不是销毁该对象本身!

3,__clone()克隆

触发时机:是在克隆一个对象的时候,对新对象进行初始化的工作

//克隆方法在克隆对象的时候对新对象的初始化工作
 
public function __clone(){
 
 $this->is_clone=true;
} 

思考:

克隆出来的对象还是不是Student类中的一个实例呢?

我们可以利用instanceof运算符来进行判断!

instanceof就是用来判断某个对象是否是某个类的一个实例!

需要两个操作数,前面是一个对象变量,后面是一个类名!返回一个布尔值!

var_dump($stu instanceof Stu);  

//返回bool(true)

4.__autoload()自动加载类

当调用不存在的类的时候自动调用!

<?php 

/**
* 自动加载类
* 需要什么类__autoload会自动调用需要的文件
*
*/

public function __autoload($class_name)
{
 require_once "../Model/{$class_name}.class.php";
}
 ?>

5.__tostring()

当将对象当成字符串使用的时候自动调用

6.__invoke()

当将对象当成函数使用的时候自动调用

7,__set()

当对无法访问的属性赋值时自动调用(比如:类外调用私有属性)

8.__get()

当对获取无法访问的属性值的时候自动调用

9.__unset()

当销毁无法访问的属性的时候自动调用

10.__isset()

当判断无法访问的属性是否存在的时候自动调用

11.__call()

当调用无法访问的普通方法时自动触发

<?php 
class Stu{

 public function __call(){
echo "error";
 }
}
$stu = new Stu();
//此时Stu类里没有show()方法,会触发__call()函数
$stu->show();

12.__callststic()

当无法通过静态方法访问时自动触发

<?php 
class Stu{

 public static function __callstatic(){
  echo "error";
 }
}
$stu = new Stu();
//此时Stu类里没有show()方法,会触发__call()函数
$stu::show();

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

PHP 相关文章推荐
PHP+JS无限级可伸缩菜单详解(简单易懂)
Jan 02 PHP
使用XDebug调试及单元测试覆盖率分析
Jan 27 PHP
php环境配置之CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI比较?
Oct 17 PHP
深入解析PHP的引用计数机制
Jun 14 PHP
解析使用ThinkPHP应该掌握的调试手段
Jun 20 PHP
php获取从百度搜索进入网站的关键词的详细代码
Jan 08 PHP
thinkphp的c方法使用示例
Feb 24 PHP
php生成随机颜色的方法
Nov 13 PHP
PHP 返回13位时间戳的实现代码
May 13 PHP
Laravel构建即时应用的一种实现方法详解
Aug 31 PHP
php如何比较两个浮点数是否相等详解
Feb 12 PHP
解决php写入数据库乱码的问题
Sep 17 PHP
PHP实现Unicode编码相互转换的方法示例
Nov 17 #PHP
PHP实现文件下载【实例分享】
Apr 28 #PHP
PHP实现批量删除(封装)
Apr 28 #PHP
ThinkPHP实现生成和校验验证码功能
Apr 28 #PHP
PHP后台微信支付和支付宝支付开发
Apr 28 #PHP
ThinkPHP中create()方法自动验证表单信息
Apr 28 #PHP
ThinkPHP实现简单登陆功能
Apr 28 #PHP
You might like
动画 《Pokemon Sword·Shield》系列WEB动画《薄明之翼》第2话声优阵容公开!
2020/03/06 日漫
PHP 中的一些经验积累
2006/10/09 PHP
使用XDebug调试及单元测试覆盖率分析
2011/01/27 PHP
laravel 框架结合关联查询 when()用法分析
2019/11/22 PHP
学习JavaScript的最佳方法分享
2011/10/21 Javascript
js与jquery获取父级元素,子级元素,兄弟元素的实现方法
2014/01/09 Javascript
AngularJS中的模块详解
2015/01/29 Javascript
php+ajax+jquery实现点击加载更多内容
2015/05/03 Javascript
js实现文件上传表单域美化特效
2015/11/02 Javascript
详解javascript传统方法实现异步校验
2016/01/22 Javascript
Javascript设计模式之观察者模式(推荐)
2016/03/29 Javascript
详解angularJs中关于ng-class的三种使用方式说明
2017/06/02 Javascript
JS+Canvas绘制动态时钟效果
2017/11/10 Javascript
JS滚轮控制图片缩放大小和拖动的实例代码
2018/11/20 Javascript
Vue中JS动画与Velocity.js的结合使用
2019/02/13 Javascript
使用vue-cli3 创建vue项目并配置VS Code 自动代码格式化 vue语法高亮问题
2019/05/14 Javascript
微信小程序实现抖音播放效果的实例代码
2020/04/11 Javascript
[01:01:18]VP vs NIP 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python 的内置字符串方法小结
2016/03/15 Python
解决phantomjs截图失败,phantom.exit位置的问题
2018/05/17 Python
Python将一个Excel拆分为多个Excel
2018/11/07 Python
Python3利用print输出带颜色的彩色字体示例代码
2019/04/08 Python
python基于opencv实现人脸识别
2021/01/04 Python
利用CSS3实现文本框的清除按钮相关的一些效果
2015/06/23 HTML / CSS
家乐福巴西网上超市:Carrefour巴西
2016/10/31 全球购物
卡塔尔航空官方网站:Qatar Airways
2017/02/08 全球购物
JOSEPH官网:英国奢侈时尚品牌
2018/01/31 全球购物
大学生文员专业个人求职信范文
2014/01/05 职场文书
《太阳》教学反思
2014/02/21 职场文书
大学应届毕业生求职信
2014/05/24 职场文书
党员应该树立反腐倡廉的坚定意识思想汇报
2014/09/12 职场文书
2015国庆节宣传语
2015/07/14 职场文书
委托书范本格式
2019/04/18 职场文书
java基础——多线程
2021/07/03 Java/Android
关于redisson缓存序列化几枚大坑说明
2021/08/04 Redis
一次项目中Thinkphp绕过禁用函数的实战记录
2021/11/17 PHP