__invoke()魔术方法

本文介绍了PHP中的__invoke魔术方法,当对象被当作函数调用时,此方法将自动触发。示例展示了如何在类中定义并使用__invoke,包括构造函数和__invoke方法的参数传递。通过实例代码,理解如何在对象调用中管理参数。

__invoke():当尝试以调用函数的方式调用一个对象时,__invoke() 方法会被自动调用。

<?php
/**
 * FileName: invoke.php
 * Date: 2021/5/20
 */
class InvokeDemo
{
    public function __construct()
    {
        echo '我被创建了'.PHP_EOL;
    }

    public function __invoke()
    {
        // TODO: Implement __invoke() method.
        echo '触发invoke'.PHP_EOL;
    }
}
$invokeDemo = new InvokeDemo();
print_r($invokeDemo());

执行后
在这里插入图片描述
需要注意的是:

当以函数的形式去调用对象(类)的时候传入的参数交由__invoke()管理也就是$obj()对应,并非交给__construct()方法。

例子:

<?php
/**
 * FileName: invoke.php
 * Date: 2021/5/20
 */
class InvokeDemo
{
    public function __construct($construct)
    {
        echo $construct.'我被创建了'.PHP_EOL;
    }

    public function __invoke($invoke)
    {
        // TODO: Implement __invoke() method.
        echo $invoke.'触发invoke'.PHP_EOL;
    }
}
$invokeDemo = new InvokeDemo($construct = '我是构造方法参数');
print_r($invokeDemo($invoke = '我是invoke方法参数'));

在这里插入图片描述

`__invoke()` 相关的内容在不同的编程语言和场景中有不同的表现。在编程语境里,`__invoke()` 通常指的是对象的可调用特性相关的方法。 在 PHP 等语言中,`__invoke()` 是一个魔术方法。当尝试将一个对象当作函数调用时,会自动触发该对象的 `__invoke()` 方法。其作用在于赋予对象可以像函数一样被调用的能力,使代码更加灵活和简洁。例如下面模拟代码(以 PHP 为例): ```php class CallableObject { public function __invoke() { echo "This object is being called as a function!"; } } $obj = new CallableObject(); $obj(); // 会触发 __invoke() 方法 ``` 在 C++ 中,有 `std::invoke()` 函数。它可以调用可调用对象,包括函数、成员函数、函数对象等。以下是 C++ 中 `std::invoke()` 的使用示例: ```cpp #include <iostream> #include <functional> class Cinvoke { public: void fun() { std::cout << "this is fun" << std::endl; } void fun2(std::string str) { std::cout << "str is " << str << std::endl; } int fun3(int x, int y) { return x + y; } static void show() { std::cout << "show" << std::endl; } }; void invok_excute() { Cinvoke obj; std::invoke(&Cinvoke::fun, obj); std::invoke(&Cinvoke::fun2, obj, "xiaohai"); std::cout << "res is " << std::invoke(&Cinvoke::fun3, obj, 10, 20) << std::endl; std::invoke(&Cinvoke::show); } int main() { invok_excute(); return 0; } ``` `std::invoke()` 的作用是统一调用各种可调用对象的方式,简化代码逻辑,使得调用不同类型的可调用对象变得更加方便。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PHP开光程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值