当前位置: 首页 > 面试题库 >

如何在php中为其他所有函数调用自动调用函数

荀靖
2023-03-14
问题内容
Class test{
    function test1()
    {
        echo 'inside test1';
    }

    function test2()
    {
        echo 'test2';
    }

    function test3()
    {
        echo 'test3';
    }
}

$obj = new test;
$obj->test2();//prints test2
$obj->test3();//prints test3

现在我的问题是

在执行任何调用的函数之前,如何调用另一个函数?在上述情况下,我如何才能为每个其他函数调用自动调用“ test1”函数,这样我就可以获得输出,

test1
test2
test1
test3

目前我正在获得输出

test2
test3

我不能在每个函数定义中都调用“ test1”函数,因为可能有很多函数。我需要一种在调用类的任何函数之前自动调用函数的方法。

任何替代方式也可以。


问题答案:

最好的选择是魔术方法__call,请参见以下示例:

<?php

class test {
    function __construct(){}

    private function test1(){
        echo "In test1", PHP_EOL;
    }
    private function test2(){
        echo "test2", PHP_EOL;
    }
    protected function test3(){
        return "test3" . PHP_EOL;
    }
    public function __call($method,$arguments) {
        if(method_exists($this, $method)) {
            $this->test1();
            return call_user_func_array(array($this,$method),$arguments);
        }
    }
}

$a = new test;
$a->test2();
echo $a->test3();
/*
* Output:
* In test1
* test2
* In test1
* test3
*/

请注意,test2test3在由于protected和而被调用的上下文中不可见private。如果这些方法是公开的,则上面的示例将失败。

test1不必声明private

ideone.com示例可以在这里找到

更新 :添加到ideone的链接,添加带有返回值的示例。



 类似资料:
  • 我已经用PHP类分离了几个文件,现在我需要将它们放在一个函数中,如下所示: 中的类名为settings,中的类名为users。我有个错误: PHP可捕获的致命错误:传递给ajaxlogin::__construct()的参数1必须是设置的实例,没有给定,在第47行/var/www/html/idcms/admin/class/login-ajax.PHP中调用,在第13行/var/www/html

  • 我一直在学习一些关于如何创建会话对象的课程,效果很好,如果我把完整的代码放到一个PHP文件中,一切都很好! 我想做的是将其放在另一个模块(PHP文件)中,只需使用一行(或等效行)即可,例如

  • 问题内容: 假设有人给您一个类,具有以下构造函数: 假设您要创建一个子类。您如何有条件地在中调用构造函数? 换句话说,进行这种工作的“正确”方法是什么? 问题答案: 是的,@ JohanSjöberg说了什么。 看起来您的示例也非常人为。没有神奇的答案可以解决这个问题:) 通常,如果您有一堆构造函数,则最好将它们重构为四个单独的类(一个类仅应负责一种类型的事情)。

  • 假设我有两个html文件具有如下功能: 我想从a.html直接指向B.html,然后直接调用函数B。我怎样才能做到?。因为我想要将JSON字符串从函数A传递到函数B,而不是使用window.onload()或$(document).ready()。 我将我的JSON字符串存储到本地存储,并将用户引导到b.html。然后函数B将读取本地存储并直接处理数据。

  • 问题内容: 我有一个plsql函数,我想从我的函数中调用另一个函数。我怎样才能做到这一点? 这是正确的方法吗? 问题答案: 函数必须返回一个值,否则您应该具有该函数的分配目标。

  • 问题内容: 我想知道是否有可能仅在条件为真时在javascript中调用php函数。例如 有没有这样做的方法。如果是这样,请告诉我。谢谢 问题答案: 不能以上面说明的方式调用PHP函数。但是,您可以使用AJAX调用PHP脚本,代码如下所示。您也可以在这里找到一个简单的示例。让我知道您是否需要进一步澄清 使用jQuery 准系统Javascript替代