【问题标题】:Are all PHP-defined functions alterable using string manipulation?是否所有 PHP 定义的函数都可以使用字符串操作进行更改?
【发布时间】:2015-12-10 16:54:29
【问题描述】:

我知道对于用户定义的函数,我可以操纵字符串来选择性地调用函数:

<?php

function printName() {
    return "Zack";  
}

function printAge() {
    return "24";    
}

$functionID = "Age";

$function = "print" . $functionID;

echo $function();//returns 24

我没有意识到你可以使用内置的 PHP 函数来做到这一点...我只是用 strposstrrpos 尝试了这个:

<?php

$x = "r";

$string = "abbabb";

$function = "str" . $x . "pos";

echo $function($string, "a"); //outputs 3 whereas if $x = ""; output is 0

我检查了 herehere 以获取有关此的文档。后一个链接显示了如何使用我已经知道的用户定义函数来做到这一点。

这种技术是否适用于任何内置的 PHP 函数?如果适用,它记录在哪里?

【问题讨论】:

  • 有函数,是的....但没有控制结构或语言结构
  • @Rizier123 谢谢,但这不是一个完整的列表,因为 strpos 和 strrpos 不包括在内,这些内置的 PHP 函数使用字符串方法为我工作
  • 从 PHP 5.4.0 开始,您可以调用存储在变量中的任何可调用对象...。尝试制作完整列表是没有意义的,因为它会根据包含的模块等而有所不同
  • @Mark Ba​​ker 很高兴知道...谢谢。我会再搜索一些,但如果记录在案,我还没有找到

标签: php function


【解决方案1】:

我认为这适用于任何 php 函数,无论是用户函数还是内置函数。因为脚本通过编译阶段的方式,它会尝试解析变量名,然后使用函数名进行函数调用。

【讨论】:

  • 在工作中,我花了几天时间构建一个可以从这种技术中受益的脚本......我只是想在某个地方看到它可以用于任何 PHP 内置函数跨度>
  • 参见php.net/manual/en/language.types.callable.php:PHP 函数通过其名称作为字符串传递。可以使用任何 BUILT-IN 或用户定义的函数,但语言结构除外,例如...
  • 我不知道它是否记录在案,但你可以做的是用任何示例代码调试 php 二进制文件,如果你了解 php 如何编译以创建操作码以及它如何执行操作码,那么您可以说服自己,就这个问题而言,内置函数和内置函数之间没有区别。
  • @Ritesh...感谢您的评论,但我在人手不足的工作场所还​​有很多事情要完成,我可以避免的任何测试都为我节省了宝贵的时间
  • @maxhb...完美。谢谢!但是这些信息并不明显:)
猜你喜欢
  • 2012-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-19
  • 1970-01-01
  • 1970-01-01
  • 2019-12-09
  • 2018-10-10
相关资源
最近更新 更多