1 __autoload()自动包含类文件

通常会把类的定义单独写到一个文件里,要在另外的文件调用时需要引用require,但类的定义文件会很多就会造成一下问题

    //1 如果包含多个类文件,需要一一引入
//2 引入多个类,如果用不到会浪费
//3 引入类文件可能会遗漏,比如:创建了一个对象,而这个对象的类文件没有引入,就会产生错误

所以用__autoload()动态引入类文件,当一个对象被实例化时,就会自动调用__autoload()函数,将类名作为字符串参数传递给它,所以可以这么做:

Computer.class.php是一个定义了电脑类的文件

    function __autoload($_className){
// echo $_className; //输出类名
require strtolower($_className).'.class.php';
}
$com = new Computer();
$com->_run();

2 当对象调用一个不存在的方法时,会自动调用__call()方法,来屏蔽对象调用方法时产生的错误。

<?php
class Computer{
public function _run(){
echo '运行';
}
//采用__call()来屏蔽错误
private function __call($_methodName,$_argList){
echo $_methodName.'()方法不存在'; //会输出_go()不存在
print_r($_argList); //输出数组array()
}
}
$com = new Computer();
$com->_go(); //调用不存在的方法时会屏蔽错误 ?>

3 __tostring() 当直接打印对象时(echo 对象名;),会报错,__tostring()方法可以在打印对象时自动调用,从而不会产生错误

<?php
class Computer{
public function _run(){
return '运行中';
}
private function __toString(){
return '直接打印对象';
}
}
$comp = new Computer();
echo $comp; //直接打印对象
?>

4 __clone()PHP可以在类中定义一个__clone()内置方法来调整对象的克隆行为。当一个对象被克隆的时候自动执行__clone()方法,而复制的对象可以在其方法体内进行调整

单独讲

OOP的四个魔术方法的更多相关文章

  1. php中的重载以及几个常用的魔术方法示例

    在面向对象语言中,有一个很重要的概念——overload,即重载.所谓重载,一般是用于在一个类内实现若干重载的方法,这些方法的名称相同而参数形式不同.但是,在php中,这个概念跟大多面向对象语言中的“ ...

  2. 【代码总结】PHP面向对象之常见的关键字和魔术方法

    一.关键字的使用 1.final关键字 只能用来修饰类 和 成员方法  不能修饰成员属性 被final修饰的类不能被继承 用final修饰的成员方法 不能被子类覆盖(重写) <?php // f ...

  3. Python 基础之面向对象之常用魔术方法

    一.__init__魔术属性 触发时机:实例化对象,初始化的时候触发功能:为对象添加成员,用来做初始化的参数:参数不固定,至少一个self参数返回值:无 1.基本用法 #例:class MyClass ...

  4. php部分---面向对象静态、抽象类、oop接口、加载类、魔术方法、关键字。

    静态  static关键字 普通成员普通成员是属于对象的 静态成员静态成员是属于类的 普通方法里面可以调用静态成员静态方法里面不能调用普通成员self关键字 在类里面代表该类 普通类class Ren ...

  5. PHP 魔术方法 __sleep __wakeup(四)

    串行化serialize可以把变量包括对象,转化成连续bytes数据. 你可以将串行化后的变量存在一个文件里或在网络上传输. 然后再反串行化还原为原来的数据. 你在反串行化类的对象之前定义的类,PHP ...

  6. PHP中的面向对象OOP中的魔术方法

    一.什么是魔术方法: PHP为我们提供了一系列用__开头的函数,这些函数无需自己手动调用,会在合适的时机自动调用,这类函数称为魔术函数.例如: function __construct(){} 在ne ...

  7. Python 面向对象(四) 反射及其魔术方法

    反射 reflection 也有人称之为自省 作用: 运行时获取.添加对象的类型定义信息,包括类 内建方法: getattr(object, name[, default])   返回object对象 ...

  8. OOP的魔术方法

    1.构造函数:__construct(): 构造函数是类中的一个特殊函数,当我们使用new关键字实例化对象时,相当于调用了类的构造函数. function __construct($name){ $t ...

  9. 面向对象与面向过程 $this的注意事项和魔术方法set和get

    一.面向对象与面向过程的区别: 二者都是一种思想,面向对象是相对于面向过程而言的.面向过程,强调的是功能行为.面向对象,将功能封装进对象,强调具备了功能的对象.面向对象更加强调运用人类在日常的思维逻辑 ...

随机推荐

  1. 【总结】使用WebBrowser遇到的陷阱

    一.前言 一直想用WebBrowser做一些好玩的东西,比如抓取分析感兴趣的网站页面.自动点击提交页面等,所以最近在研究WebBrowser.WebBrowser的功能十分强大,就是一个微型的Brow ...

  2. mysql表单输入数据出现中文乱码解决方法

    MySQL会出现中文乱码的原因在于1.server本身设定问题,一般来说是latin1 2.建库建表时没有制定编码格式. 解决方法: 1.建库的时候 CREATE DATABASE test CHAR ...

  3. 脚手架搭建的vue项目里引入jquery和bootstrap

    引入jquery: 1.在cmd输入:npm install jquery,回车,等待.. 2.在webpack.base.conf.js里进行如下操作: 3.在webpack.prod.conf.j ...

  4. IntelliJ IDEA 15,16 win 7 64位安装包以及注册码 百度云盘

    不知道发出来,有用没有,要是官网下载不了的话,可以用我的这个哦,虽然不是最新的. ideaIU-162.1447.21 ideaIU-15.0.2 win7  64系统的安装包 链接:http://p ...

  5. 机器学习——支持向量机(SVM)之Platt SMO算法

    Platt SMO算法是通过一个外循环来选择第一个alpha值的,并且其选择过程会在两种方式之间进行交替: 一种方式是在所有数据集上进行单遍扫描,另一种方式则是在非边界alpha中实现单遍扫描. 所谓 ...

  6. canvas.drawBitmap()频繁调用导致应用崩溃问题

    因为opengl不熟,要在opengl上面贴文字  时间紧所以用到一个折中的办法  文字转bitmap 因为文字较多,对话形式  还要分行,分段,逻辑处理的比较复杂     运行中会有闪退发生,且不可 ...

  7. js常用字符串处理方法

    JS自带函数concat将两个或多个字符的文本组合起来,返回一个新的字符串.var a = "hello";var b = ",world";var c = a ...

  8. applicationContext.xml

    <bean id="dataSource" parent="parentDataSource"> <property name="u ...

  9. 用uniq来处理文件重复数据--交集,差集,计数等(转)

    经常有这样的需求:两个文本文件要求取重复的行或只取不重复的,简单的情况下用sort和uniq来处理是非常方便的: 利用现存两个文件,生成一个新的文件 取出两个文件的并集(重复的行只保留一份) 取出两个 ...

  10. [Algorithm] 机器学习算法常用指标总结

    考虑一个二分问题,即将实例分成正类(positive)或负类(negative).对一个二分问题来说,会出现四种情况.如果一个实例是正类并且也被 预测成正类,即为真正类(True positive), ...