本文指标:
一、理解PHP中魔术办法的界说
二、理解__tostring()魔术办法的应用场景
三、把握__tostring()魔术办法的用法
四、理解__invoke()魔术办法的应用场景
五、把握__invoke()魔术办法的用法
(一)、理解PHP中魔术办法的界说
PHP 将一切以 __(两个下划线)扫尾的类办法保存为魔术办法。以是正在界说类办法时,除了了上述魔术办法,倡议没有要以 __ 为前缀。
(二)、理解__tostring()的魔术办法的应用场景
当咱们有需求将一个工具转换成字符串,咱们能够正在类中界说__tostring办法,而后正在外面写咱们的自界说逻辑
(三)、把握__tostring()的魔术办法的用法
总结:
一、正在类中魔术办法__tostring办法的界说,界说格局以下public function __tostring(),留意是2个下划线,没有是一个
二、当工具被当作String应用时,这个办法会被主动挪用
-比方咱们普通输入字符串,是用echo "你好",以是假如咱们心愿把一个工具当作String来应用,咱们也能够间接这样写echo $obj,那此时,这个这行代码会触发这个__tostring魔术办法的执行
每一个总结都是经过理论患上进去的,如今咱们用理论来演示总结,这样能够促成了解,让每一个总结了解起来愈加明晰,直观
案例1、
理论指标:
一、正在类中,魔术办法__tostring办法的界说,界说格局以下public function __tostring(),留意是2个下划线,没有是一个
详细代码以下:
<?php class Animal{ public $name = ""; public function __construct($name){ $this->name = $name; } public function eat(){ } public function sleep(){ } //魔术办法 public function __tostring(){ return "主动执行了Animal类中的__tostring办法<br/>"; } } $monkey = new Animal("山公"); ?>
案例2、
理论指标:
二、当工具被当作String应用时,这个办法会被主动挪用
-比方咱们普通输入字符串,是用echo "你好",以是假如咱们心愿把一个工具当作String来应用,咱们也能够间接这样写echo $obj,那此时,这个这行代码会触发这个__tostring魔术办法的执行
详细代码以下:
<?php class Animal{ public $name = ""; public function __construct($name){ $this->name = $name; } public function eat(){ } public function sleep(){ } //魔术办法 public function __tostring(){ return "主动执行了Animal类中的__tostring办法<br/>"; } } $monkey = new Animal("山公"); echo $monkey; ?>
运转后果为:
主动执行了Animal类中的__tostring办法
咱们发现其实咱们不手动的去挪用__tostring办法,也就是说不写成$monkey->__tostring(),然而这个办法仍然执行了,由于甚么呢?由于咱们写了echo $monkey,以是相称于咱们把$monkey工具当成为了字符串来应用了,而后这个类中又界说了这个魔术办法,以是它就像魔术同样,忽然就被主动执行了
这里肯定要留意,是2个下划线,没有是一个,不然就没有是魔术办法了,上面仍是再来做下测试
详细代码以下:
<?php class Animal{ public $name = ""; public function __construct($name){ $this->name = $name; } public function eat(){ } public function sleep(){ } //魔术办法 留意这里改为了一个下划线 public function _tostring(){ return "主动执行了Animal类中的__tostring办法<br/>"; } } $monkey = new Animal("山公"); echo $monkey; ?>
运转后果为:
Catchable fatal error: Object of class Animal could not be converted to string in D:\E-class\class-code\classing\index.php on line 19
以是此刻就会报错了,由于不__tostring的魔术办法了,以是肯定要留意是2个下划线,就如同结构函数以及析构函数同样,都是两个下划线
(四)、理解__invoke()魔术办法的应用场景
当咱们有需求将一个工具间接当成办法应用时,咱们能够正在类中界说__invoke办法,而后正在外面写咱们的自界说逻辑
(五)、把握__invoke()的魔术办法的用法
总结:
一、类中__invoke魔术办法的界说以下:public function __invoke()其实以及一般函数同样的界说,就是称号必需是__invoke
二、当工具被当作办法应用时,这个办法会被主动挪用
-比方咱们普通挪用办法是怎样挪用的,是间接办法名(),比方smile()这样,以是当咱们心愿把一个工具当成办法应用时,应该怎样做呢?其实就是间接$obj(外面能够写参数),这样的方式就是办法挪用的方式对吧,那末,一旦咱们这样写$obj(参数),那末这个类中的__invoke()的魔术办法也会被主动的挪用
每一个总结都是经过理论患上进去的,如今咱们用理论来演示总结,这样能够促成了解,让每一个总结了解起来愈加明晰,直观
详细代码:
案例1、
理论指标:
一、类中__invoke魔术办法的界说以下:public function __invoke()其实以及一般函数同样的界说,就是称号必需是__invoke
详细代码以下:
<?php class Animal{ public $name = ""; public function __construct($name){ $this->name = $name; } public function eat(){ } public function sleep(){ } //魔术办法 public function __invoke(){ return "主动执行了Animal类中的__invoke办法<br/>"; } } $monkey = new Animal("山公"); ?>
案例2、
理论指标:
一、当工具被当作办法应用时,这个办法会被主动挪用
-比方咱们普通挪用办法是怎样挪用的,是间接办法名(),比方smile()这样,以是当咱们心愿把一个工具当成办法应用时,应该怎样做呢?其实就是间接$obj(外面能够写参数),这样的方式就是办法挪用的方式对吧,那末,一旦咱们这样写$obj(参数),那末这个__invoke()的魔术办法也会主动的挪用
详细代码以下:
<?php class Animal{ public $name = ""; public function __construct($name){ $this->name = $name; } public function eat(){ } public function sleep(){ } //魔术办法 public function __invoke(){ echo "主动执行了Animal类中的__invoke办法<br/>"; } } $monkey = new Animal("山公"); $monkey(); ?>
运转后果以下:
主动执行了Animal类中的__invoke办法
咱们发现其实咱们不手动的去挪用__invoke办法,也就是说不写成$monkey->__invoke(),然而这个办法仍然执行了,由于甚么呢?由于咱们写了$monkey(),以是相称于咱们把$monkey工具当成办法来应用了,而后这个类中又界说了这个魔术办法,以是它就像魔术同样,忽然就被主动执行了
这里肯定要留意,是2个下划线,没有是一个,不然就没有是魔术办法了,上面仍是再来做下测试
<?php class Animal{ public $name = ""; public function __construct($name){ $this->name = $name; } public function eat(){ } public function sleep(){ } //魔术办法 只写一个_试下 public function _invoke(){ echo "主动执行了Animal类中的__invoke办法<br/>"; } } $monkey = new Animal("山公"); $monkey(); ?>
运转后果以下:
Fatal error: Uncaught Error: Function name must be a string in D:\E-class\class-code\classing\index.php:19 Stack trace: #0 {main} thrown in D:\E-class\class-code\classing\index.php on line 19
以是肯定要留意是2个下划线,没有是一个,不然就没有是魔术办法了
总结:
一、本文次要是解说了2个魔术办法,__tostring,__invoke,并详细讲了他们的详细完成形式以及应用场景
心愿本文能给各人带来肯定的协助,谢谢!!!
以上就是PHP面向工具之魔术办法(__tostring,__invoke)详解的具体内容,更多请存眷资源魔其它相干文章!
标签: php开发教程 php开发资料 php开发自学 面向对象
抱歉,评论功能暂时关闭!