PHP学习笔记(3)_PHP教程

php中文网
发布: 2016-07-13 10:34:56
原创
981人浏览过

php的class与其他语言有很多不同点。php允许很奇葩的在静态方法中调用实例方法,提供了关键字self和static用于访问类自身的静态成员。self永远是指当前的类,而static则可能会变成指向派生类,这也是比较奇葩的地方,静态成员是可以继承和覆盖的。

 

PHP还提供了一些以双下划线开头的魔术方法(包括构造方法和一些内置的“接口”),下面即是PHP现有的魔法方法:

1、__construct($args) 和 __destruct(void) 

即构造方法和析构方法,与其他语言相同,在实例化时调用构造方法,在回收对象时调用析构方法。析构方法可用于在执行结束后自动回收资源,像关闭一些以指针引用的资源。

立即学习PHP免费学习笔记(深入)”;

 

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)

这两个方法会分别在序列化之前和序列化之后调用,可用于整理将序列化的对象的属性和在序列化之后恢复状态。

Get笔记
Get笔记

Get笔记,一款AI驱动的知识管理产品

Get笔记 125
查看详情 Get笔记

 

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的机制,如果还需要检测一个文件是否存在,可能会让运行效率变低。

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/748242.htmlTechArticlePHP的class与其他语言有很多不同点。PHP允许很奇葩的在静态方法中调用实例方法,提供了关键字self和static用于访问类自身的静态成员。sel...
PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号