仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1662|回复: 19
打印 上一主题 下一主题

[学习教程] PHP编程:PHP 5.3的新增魔术办法 __invoke

[复制链接]
爱飞 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-16 00:23:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
不懂的问题有很多高手帮你解决。但不要认为你是新手,就不能帮助别人,比如今天你学会了怎样安装PHP,明天还可能有朋友会问这个问题,你就可以给他解答,不要认为这是浪费时间,忙别人其实就是帮助自己。      


  PHP5.3新增了一个叫做__invoke的魔术办法,如许在创立实例后,可以直接挪用对象。
  class testClass
  {
  public function __invoke
  {
  print “hello world”;
  }
  }
  $n = new testClass;
  $n();
  履行了局为:
  hello world。
  官方示例
  
  class CallableClass
  {
  public function __invoke($x)
  {
  var_dump($x);
  }
  }
  $obj = new CallableClass;
  $obj(5);
  var_dump(is_callable($obj));
  ?>
  附:PHP其他魔术办法详解
  php中的类就能够利用魔术办法了。其划定以两个下划线(__)开首的办法都保存为魔术办法,所以建议人人函数名最好不必__开首,除非是为了重载已有的魔术办法。
  The function names __construct, __destruct, __call, __callStatic, __get, __set, __isset, __unset, __sleep, __wakeup, __toString, __invoke, __set_state and__clone are magical in PHP classes. You cannot have functions with these names in any of your classes unless you want the magic functionality associated with them.
  这两个办法是为在类和他们的父类中没有声明的属性而设计的。
  ◆__get($property)当挪用一个不决义的属性时,此办法会被触发,传递的参数是被会见的属性名。
  ◆__set($property,$value)给一个不决义的属性赋值时,此办法会被触发,传递的参数是被设置的属性名和值。
  这里的没有声明包含当利用对象挪用时,会见掌握为proteced,private的属性(即没有权限会见的属性)。
  与__get办法和__set办法不异,这里的没有声明包含当利用对象挪用时,会见掌握为proteced,private的属性(即没有权限会见的属性)。
  这里的不决义的办法包含没有权限会见的办法;假如办法不存在就去父类中找这个办法,假如父类中也不存在就去挪用本类的__call()方?法,假如本类中不存在__call()办法就去找父类中的__call()办法。
  __autoload函数,它会在试图利用还没有被界说的类时主动挪用。经由过程挪用此函数,剧本引擎在php失足掉败前有了最初一个时机加载所需的类。
  注重:在__autoload函数中抛出的异常不克不及被catch语句块捕捉并招致致命毛病,所以应当在函数自己做捕捉。
  ◆__construct机关办法,当一个对象创立时挪用此办法,相对php4利用此办法的优点是:可使机关办法有一个举世无双的称号,不管它地点的类的称号是甚么.如许你在改动类的称号时,就不需求改动机关办法的称号。
  ◆__destruct析构办法,php将在对象被烧毁前(即从内存中排除前)挪用这个办法。默许情形下,php仅仅释放对象属性所占用的内存并烧毁对象相干的资本,析构函数答应你在利用一个对象以后履行恣意代码来排除内存。当php决意你的剧本不再与对象相干时,析构函数将被挪用。
  在一个函数的定名空间内,这会产生在函数return的时分。关于全局变量,这产生于剧本停止的时分。假如你想明白地烧毁一个对象,你可以给指向该对象的变量分派任何其它值.凡是将变量赋值勤为null或挪用unset。
  php5中的对象赋值是利用的援用赋值,假如想复制一个对象则需求利用clone办法,在挪用此办法是对象会主动挪用__clone魔术办法,假如在对象复制需求履行某些初始化操作,可以在__clone办法完成。
  __tostring办法在将一个对象转化成字符串时主动挪用,好比利用echo打印对象时。
  在php5.2.0之前,__tostring办法只要联合利用echo()或print()时才干失效。php5.2.0以后,则可以在任何字符串情况失效(例如经由过程printf(),利用%s润色符),但不克不及用于非字符串情况(如利用%d润色符)。从php5.2.0,假如将一个不决义__tostring办法的对象转换为字符串,会报出一个e_recoverable_error毛病。
  ◆__wakeup反串行化的时分挪用
  serialize()反省类中是不是有魔术称号__sleep的函数。假如如许,该函数将在任何序列化之前运转。它可以排除对象并应当前往一个包括有该对象中应被序列化的一切变量名的数组。
  利用__sleep的目标是封闭对象能够具有的任何数据库毗连,提交守候中的数据或停止相似的排除义务。另外,假如有十分大的对象而其实不需求完整贮存上去时此函数也很有效。
  PHP相反地,unserialize()反省具有魔术称号__wakeup的函数的存在。假如存在,此函数可以重建对象能够具有的任何资本。利用__wakeup的目标是重建在序列化中能够丧失的任何数据库毗连和处置其它从头初始化的义务。
  当测验考试以挪用函数的体例挪用一个对象时,__invoke办法会被主动挪用。
  它的任务体例相似于__call()魔术办法,__callstatic()是为了处置静态办法挪用。
  php的确增强了对__callstatic()办法的界说;它必需是公共的,而且必需被声明为静态的。一样,__call()魔术办法必需被界说为公共的,一切其他魔术办法都必需如斯。
<P style="TEXT-INDENT: 2em">
你的确对PHP有兴趣,那么选择教材也是很重要的。
不帅 该用户已被删除
沙发
发表于 2015-3-4 19:39:15 | 只看该作者
使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。
只想知道 该用户已被删除
板凳
发表于 2015-3-6 20:18:51 | 只看该作者
多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。
愤怒的大鸟 该用户已被删除
地板
发表于 2015-3-11 00:52:16 | 只看该作者
在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。
兰色精灵 该用户已被删除
5#
发表于 2015-3-17 17:09:39 | 只看该作者
首先我是坚决反对新手上来就用框架的,因为对底层的东西一点都不了解,造成知识上的真空,会对以后的发展不利。我的观点上手了解下框架就好,代码还是手写。当然啦如果是位别的编程语言的高手的话,这个就另当别论啦。
深爱那片海 该用户已被删除
6#
发表于 2015-3-24 12:43:03 | 只看该作者
写的比较杂,因为我也是个新手,不当至于大家多多指正。
飘飘悠悠 该用户已被删除
7#
发表于 2015-3-24 13:38:39 | 只看该作者
遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。
第二个灵魂 该用户已被删除
8#
发表于 2015-4-14 22:31:05 | 只看该作者
不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。
冷月葬花魂 该用户已被删除
9#
发表于 2015-4-16 21:38:32 | 只看该作者
我要在声明一下:我是个菜鸟!!我对php这门优秀的语言也是知之甚少。但是我要在这里说一下php在网站开发中最常用的几个功能:
小魔女 该用户已被删除
10#
发表于 2015-4-22 11:59:12 | 只看该作者
要进行开发,搭建环境是首先需要做的事,windows下面我习惯把环境那个安装在C盘下面,因为我配的环境经常出现诡异事件,什么事都没做环境有的时候就不能用啦。
若天明 该用户已被删除
11#
发表于 2015-4-24 00:15:28 | 只看该作者
遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。
小妖女 该用户已被删除
12#
发表于 2015-5-9 16:13:49 | 只看该作者
说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年  具体的记不清啦,囧。
admin 该用户已被删除
13#
发表于 2015-6-4 04:44:57 | 只看该作者
说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年  具体的记不清啦,囧。
分手快乐 该用户已被删除
14#
发表于 2015-6-21 23:52:36 | 只看该作者
我还是强烈建议自己搭建php环境。因为在搭建的过程中你会遇到一些问题,通过搜索或是看php手册解决问题后,你会更加深刻的理解它们的工作原理,了解到php配置文件中的一些选项设置。
金色的骷髅 该用户已被删除
15#
发表于 2015-6-29 22:27:12 | 只看该作者
其实没啥难的,多练习,练习写程序,真正的实践比看100遍都有用。不过要熟悉引擎
透明 该用户已被删除
16#
发表于 2015-7-10 06:26:34 | 只看该作者
有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。
老尸 该用户已被删除
17#
发表于 2015-7-10 19:33:46 | 只看该作者
,熟悉html,能用div+css,还有javascript,优先考虑linux。我在开始学习的时候,就想把这些知识一起学习,我天真的认为同时学习能够互相呼应,因为知识是相通的。
精灵巫婆 该用户已被删除
18#
发表于 2015-7-13 19:35:01 | 只看该作者
建数据库表的时候,int型要输入长度的,其实是个摆设的输入几位都没影响的,只要大于4就行,囧。
再见西城 该用户已被删除
19#
发表于 2015-7-18 01:05:35 | 只看该作者
Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81
乐观 该用户已被删除
20#
发表于 2015-7-20 01:43:29 | 只看该作者
不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-29 07:38

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表