PHP学习笔记(3) - 奇怪的class与autoload
PHP的class与其他语言有很多不同点。PHP允许很奇葩的在静态方法中调用实例方法,提供了关键字self和static用于访问类自身的静态成员。self永远是指当前的类,而static则可能会变成指向派生类,这也是比较奇葩的地方,静态成员是可以继承和覆盖的。
PHP还提供了一些以双下划线开头的魔术方法(包括构造方法和一些内置的“接口”),下面即是PHP现有的魔法方法:
1、__construct($args) 和 __destruct(void)
即构造方法和析构方法,与其他语言相同,在实例化时调用构造方法,在回收对象时调用析构方法。析构方法可用于在执行结束后自动回收资源,像关闭一些以指针引用的资源。
2、mixed __call (string $name , array $arguments) 和 mixed __callStatic (string $name , array $arguments)
如果调用一个对象中不存在的方法或类中不存在静态方法,就会分别调用上面两个方法。这两个方法使得你可以使用一些特别的动态运行机制,让方法无中生有。个人建议尽量少用,它们会让代码难以维护,并且无法被IDE支持。
3、mixed __get (string $name) 和 __set (string $name , mixed $value)
跟__call一样,它们是在调用不存在的属性时候被执行,同样建议少用。
4、bool __isset (string $name) 和 __unset (string $name)
当对对象不存在的属性调用 isset() 或 empty() 时,__isset() 会被调用。__unset则是在调用unset时被调用。
5、array __sleep (void) 和 __wakeup (void)
这两个方法会分别在序列化之前和序列化之后调用,可用于整理将序列化的对象的属性和在序列化之后恢复状态。
6、string __toString (void)
它告诉PHP在需要将对象转换为字符串时应该如何转换,像 echo new MyClass();
7、mixed __invoke ()
在把一个对象变量当成函数来调用时会调用这个方法。
8、object __set_state (array $properties)
在对一个对象调用var_export()时它将被调用,并以返回值代替对象自身,可以让它来组织导出变量的数据。
9、__clone()
用这个方法允许我们在复制对象的同时也为属性进行深拷贝,类似.net中的ICloneable接口。
关于自动加载:
PHP自身没有自动加载的机制,但是新版本中提供了spl_autoload_register这个函数来注册一个函数,在使用一个不存在的类时被注册的函数即被调用,开发者需要手工在函数中实现加载机制。笔者没深入了解过include的机制,如果还需要检测一个文件是否存在,可能会让运行效率变低。
PHP学习笔记(3) - 奇怪的class与autoload的更多相关文章
- RAC学习笔记
RAC学习笔记 ReactiveCocoa(简称为RAC),是由Github开源的一个应用于iOS和OS开发的新框架,Cocoa是苹果整套框架的简称,因此很多苹果框架喜欢以Cocoa结尾. 在学习Re ...
- AngularJS 1.2.x 学习笔记(表单校验篇)
https://my.oschina.net/cokolin/blog/526911 摘要: 本文首发于 blog.csdn.net/vipshop_ebs/article/details/39472 ...
- Android学习笔记(十九)——内容提供器
//此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 内容提供器(Content Provider)主要用于在不同的应用程序之间实现数据共享的功能,它提供了一套完整 ...
- 学习笔记:The Log(我所读过的最好的一篇分布式技术文章)
前言 这是一篇学习笔记. 学习的材料来自Jay Kreps的一篇讲Log的博文. 原文很长,但是我坚持看完了,收获颇多,也深深为Jay哥的技术能力.架构能力和对于分布式系统的理解之深刻所折服.同时也因 ...
- C# async await 学习笔记2
C# async await 学习笔记1(http://www.cnblogs.com/siso/p/3691059.html) 提到了ThreadId是一样的,突然想到在WinForm中,非UI线程 ...
- Dynamic CRM 2013学习笔记(一)插件输入实体参数解析
1. 问题描述 最近新建了一个post事件的插件,传入的参数处理如下: 1: if (context.InputParameters.Contains("Target") &a ...
- Dynamic CRM 2013学习笔记(十六)用JS控制Tab可见,可用
一个Form里经常会有好几个Tab,有时要根据一些条件设置哪些Tab可用,可见.下面就介绍下如何用JS对Tab进行控制. 1. 控制可见 function setTabVisableByName( ...
- OpenGL学习笔记:拾取与选择
转自:OpenGL学习笔记:拾取与选择 在开发OpenGL程序时,一个重要的问题就是互动,假设一个场景里面有很多元素,当用鼠标点击不同元素时,期待作出不同的反应,那么在OpenGL里面,是怎么知道我当 ...
- <老友记>学习笔记
这是六个人的故事,从不服输而又有强烈控制欲的monica,未经世事的千金大小姐rachel,正直又专情的ross,幽默风趣的chandle,古怪迷人的phoebe,花心天真的joey——六个好友之间的 ...
随机推荐
- esui控件validatebox 通过正则判断输入 json传值
<td> @Html.TextBoxFor(m => m.ActualInvoiceFee, new { @id = "txtActualInvoiceFee", ...
- android学习日记0--开发需要掌握的技能
一.开发android,我们需要哪些技能基础 1.Java基础知识 2.Linux基础知识 3.数据库基础知识 4.网络协议 5.Android基础知识 6.服务器端开发知识 1.Java基础知识 很 ...
- max_user_connections 与 max_connections,max_connect_errors, nr_open, file-max
LINUX文件设置: ulimit -n <num> ----> [/etc/profile,/.bashrc] ---->/etc/security/limits.conf ...
- iOS开发几年了,你清楚OC中的这些东西么1
前言 几年前笔者是使用Objective-C进行iOS开发, 不过在两年前Apple发布swift的时候,就开始了swift的学习, 在swift1.2发布后就正式并且一直都使用了swift进行iOS ...
- Android 自定义View修炼-高仿猎豹清理大师自定义内存开口圆环比例进度View
一.概述 看见猎豹清理大师的内存开口圆环比例进度 挺有意思的,于是就是想自己实现下这样的效果,于是反编译了猎豹清理 大师的app看了下,原来是有两张图,于是脑子里就过了下思路,利用上下两张图,旋转上面 ...
- Android View的绘制机制流程深入详解(四)
本系列文章主要着重深入介绍Android View的绘制机制及流程,第四篇主要介绍Android自定义View及ViewGroup的实现方法和流程. 主要介绍了自绘控件.自定义组合控件.自定义继承控件 ...
- ArcGIS Desktop 与 Excel(转)
来自:http://blog.csdn.net/kikitamoon/article/details/19043161 微软 OFFICE 产品中,Excel是很强大,并且平民化的表格制作工具.Arc ...
- 关于Eclipse的常用快捷键
最近用到了一些以前开发中没有用到的Eclipse中的快捷键,现在总结如下: Ctrl+Shift+G 全局 工作区中的引用 使用的图解: 在所选定的类上,按下Ctrl+Shift+G在Search的T ...
- 信号量 Semaphore
一.简介 信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用,负责协调各个线程, 以保证它们能够正确.合理的使用公共资源. Semaphore可以控制某个资源可被同时 ...
- DevExpress的 ASPxGridview控件的自动配置效果
[淘宝小店:http://shop107919332.taobao.com ] 软件运行界面.是不是很漂亮? 这里是系统配置页面,可以随时根据需要配置每张表的每个字段的显示顺序,可见与否,只读与否,编 ...