php怎么获取父亲函数名

fiy 其他 147

回复

共3条回复 我来回复
  • 不及物动词的头像
    不及物动词
    这个人很懒,什么都没有留下~
    评论

    在php中,可以使用debug_backtrace()函数获取当前调用函数的父级函数名。debug_backtrace()函数返回一个数组,数组中包含了函数调用的相关信息,包括调用栈的追踪信息。
    下面是一个示例代码:

    “`php
    function getParentFunctionName() {
    $debugTrace = debug_backtrace();
    $caller = $debugTrace[1];
    return $caller[‘function’];
    }

    function parentFunction() {
    $parentFunctionName = getParentFunctionName();
    echo “父级函数名是: ” . $parentFunctionName;
    }

    function grandParentFunction() {
    parentFunction();
    }

    grandParentFunction();
    “`

    在上面的示例代码中,getParentFunctionName()函数使用了debug_backtrace()函数获取调用栈信息。然后通过索引1获取了父级函数的相关信息(索引0为自身函数信息)。最后返回了父级函数的名称。

    当运行grandParentFunction()函数时,将打印出父级函数的名称parentFunction。

    2年前 0条评论
  • worktile的头像
    worktile
    Worktile官方账号
    评论

    在PHP中,可以使用`__FUNCTION__`魔术常量来获取当前函数的名称。然而,PHP并没有提供直接获取父函数名的内置函数或特殊常量。但是,我们可以通过一些技巧来获取父函数名。

    下面是一些获取父函数名的方法:

    1. 使用`debug_backtrace()`函数:
    `debug_backtrace()`函数会返回一个包含跟踪信息的数组,其中包括函数名、类名等。我们可以借助这个函数来获取父函数名。通过`debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2)[1][‘function’]`来获取父函数名。这样,`[1]`表示调用栈中的上一个调用,`[‘function’]`表示获取函数名。

    2. 使用`get_call_stack()`函数:
    `get_call_stack()`函数可以获取调用栈信息,包括函数名和文件名等。通过调用这个函数并取得特定层级的函数名,就可以获取父函数名。例如`get_call_stack()[1][‘function’]`将返回上一个函数名。

    3. 使用全局变量:
    在调用子函数时,可以在父函数中定义一个全局变量,并将父函数名赋值给这个变量。然后,在子函数中可以访问这个全局变量来获取父函数名。

    示例代码如下:

    “`php
    function parentFunction() {
    global $parentFunctionName;
    $parentFunctionName = __FUNCTION__;
    childFunction();
    }

    function childFunction() {
    global $parentFunctionName;
    echo “Parent function name: ” . $parentFunctionName;
    }

    parentFunction();
    “`

    4. 通过传递参数:
    在调用子函数时,可以将父函数的名称作为参数传递给子函数。然后在子函数中通过访问这个参数来获取父函数名。

    示例代码如下:

    “`php
    function parentFunction() {
    childFunction(__FUNCTION__);
    }

    function childFunction($parentFunctionName) {
    echo “Parent function name: ” . $parentFunctionName;
    }

    parentFunction();
    “`

    5. 使用反射机制:
    通过使用PHP的反射机制,我们可以获取更多关于函数的信息,包括函数的父类和接口。我们可以使用`ReflectionFunction`类来获取函数的`ReflectionFunction`对象,然后通过`getClosureScopeClass()`方法获取包含当前函数的类的`ReflectionClass`对象。最后,通过`getParentClass()`方法获取父类的`ReflectionClass`对象,并通过`getName()`方法获取父函数的名称。

    示例代码如下:

    “`php
    function parentFunction() {
    $reflector = new ReflectionFunction(__FUNCTION__);
    $class = $reflector->getClosureScopeClass();
    $parentClass = $class->getParentClass();
    echo “Parent function name: ” . $parentClass->getName();
    }

    parentFunction();
    “`

    通过以上几种方法,我们可以获取到父函数的名称,以及其他一些相关的信息。根据具体的需求,我们可以选择合适的方法来获取父函数的名称。

    2年前 0条评论
  • fiy的头像
    fiy
    Worktile&PingCode市场小伙伴
    评论

    要获取父函数的名称,可以使用PHP的反射类ReflectionFunction来实现。ReflectionFunction类提供了一组方法,可以获取函数的相关信息,包括函数名、参数、返回值等。

    下面是获取父函数名的步骤:

    1. 第一步,创建一个ReflectionFunction对象,将子函数作为参数传入。例如,我们要获取父函数名的子函数是hello(),可以使用以下代码创建ReflectionFunction对象:

    “`php
    $reflection = new ReflectionFunction(‘hello’);
    “`

    2. 第二步,使用ReflectionFunction的getFileName()方法获取函数所在的文件名称。这个方法返回一个字符串,包含了函数所在的文件的完整路径和文件名。例如:

    “`php
    $filename = $reflection->getFileName();
    “`

    3. 第三步,使用file()函数读取文件内容,并根据函数所在的行号找到函数的定义。例如,我们可以使用以下代码读取函数所在的文件内容:

    “`php
    $lines = file($filename);
    “`

    4. 第四步,使用ReflectionFunction的getStartLine()方法和getEndLine()方法获取函数所在的开始行号和结束行号。然后使用数组的array_slice()函数从文件内容中截取出函数的相关行。例如:

    “`php
    $startLine = $reflection->getStartLine();
    $endLine = $reflection->getEndLine();
    $functionLines = array_slice($lines, $startLine – 1, $endLine – $startLine + 1);
    “`

    5. 第五步,遍历函数的相关行,查找包含函数名的行。可以使用正则表达式或者字符串函数来匹配函数名。例如,我们可以使用以下代码来查找包含函数名的行:

    “`php
    $functionName = $reflection->getName();
    foreach ($functionLines as $line) {
    if (strpos($line, $functionName) !== false) {
    $parentFunctionLine = $line;
    break;
    }
    }
    “`

    6. 第六步,从包含函数名的行中提取出函数名。根据函数定义的规则,通常函数名是紧跟着关键字function后面的。可以使用正则表达式或者字符串函数来提取函数名。例如:

    “`php
    preg_match(‘/function\s+(.*?)\(/’, $parentFunctionLine, $matches);
    $parentFunctionName = $matches[1];
    “`

    最终,$parentFunctionName变量中就存储了父函数的名称。

    总结起来,获取父函数名的步骤包括:创建ReflectionFunction对象、获取函数所在的文件名称、读取文件内容、截取出函数的相关行、查找包含函数名的行、提取函数名。根据这个步骤,可以编写一个函数,封装这个过程,方便在其他地方使用。

    2年前 0条评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部