PHP 7.2 - 当函数体位于字符串中时如何动态创建匿名函数

2024-06-24

当字符串中有函数体时,如何动态创建匿名函数。

For e.g.

$user = "John Doe";
$body = "echo 'Hello' . $user;";

$myFunct = function($user) {$body}; // How do I have function body here from string.

$myFunct($user);

任何帮助将非常感激。

附: 我正在寻找 PHP 早期版本中的 create_function() 功能的替代品。就像在 create_function() 中我们可以将函数体作为字符串传递一样,我想从字符串变量中定义匿名函数体。


如果您已经探索了所有其他选项,并且绝对确定实现目标的唯一方法是使用字符串中的代码在运行时定义自定义函数,那么您有两种选择create_function.

快速的解决方案就是使用eval:

function create_custom_function($arguments, $body) {
    return eval("return function($arguments) { $body };");
}

$myFunct = create_custom_function('$user', 'echo "Hello " . $user;');

$myFunct('John Doe');
// Hello John Doe

然而,eval()可以禁用。如果您甚至在服务器上也需要这种功能eval不可用,您可以使用穷人的 eval:将函数写入临时文件,然后包含它:

function create_custom_function($arguments, $body) {
    $tmp_file = tempnam(sys_get_temp_dir(), "ccf");
    file_put_contents($tmp_file, "<?php return function($arguments) { $body };");
    $function = include($tmp_file);
    unlink($tmp_file);

    return $function;
}

$myFunct = create_custom_function('$user', 'echo "Hello " . $user;');

$myFunct('John Doe');
// Hello John Doe

In all honesty though, I strongly recommend against these approaches and suggest you find some other way to accomplish your goal. If you're building a custom code obfuscator, you're probably better off creating a php extension where the code is de-obfuscated prior to execution, similar to how ionCube Loader and Zend Guard Loader work.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP 7.2 - 当函数体位于字符串中时如何动态创建匿名函数 的相关文章

  • PHP 中的随机排列对象

    如何在 PHP 中对对象进行排序 我试过shuffle 但这需要一个数组 Warning shuffle expects parameter 1 to be array object given in var www index php o
  • Laravel 5 中的两个登录表单

    我一直想知道如何在 laravel 5 中制作两个登录表单一段时间 原因是因为我有一个多站点项目 我在一个项目中拥有管理站点和公共站点 我对路由进行了分组 以便管理路由回答一个域 公共路由回答另一个域 如下所示 Route group ar
  • simplexml,返回具有相同标签的多个项目

    我将以下 XML 文件加载到 php simplexml 中
  • PHP SFTP 简单文件上传

    我正在使用 phpseclib SFTP 类 并尝试上传这样的文件 sftp new Net SFTP mydomain com if sftp gt login user password exit Login Failed sftp g
  • 我怎样才能让我的卷发在刮擦之前等待几秒钟?

    所以我试图从网站上抓取一些数据 有一些必须被删除的名字列表 发生的情况是 如果有 15 个名字需要被删除 其中只有 5 个名字被删除 当我检查原始站点时 他们也以类似的方式加载数据 第一次加载网站时 仅显示五个名字 重新加载时会显示 10
  • whereHas 之后的 where 查询在 Laravel 5.4 中无法正常工作

    就我而言 我有channels与多对多关系的表类别 table 我想获取他们的频道类别包含像doing这样的动态值LIKE查询每个类别的标题 但我需要检查 a 的另一列channel通过 where 子句 这是一个channel结构 id
  • 如何使用 OOP 从另一个 .php 到另一个 .php 的类使用 $db?

    我是 OOP PHP 的新手 自从开始 Web 开发以来我一直在使用过程 API 所以我很难迁移到 OOP 假设我有这四个 php文件和结构如下 连接 db php
  • mysql数据库的“零知识”加密

    我一直在研究 Web 应用程序数据库层的加密 它使用MySQL 5 1 或更高版本 我记不清了 该应用程序由我的组织管理 为公共客户存储数据 最简单的选择是 AES ENCRYPT AES DECRYPT 如果坏人以某种方式访问 我的数据库
  • Woocommerce - 检查产品是否是在 60 天前创建的

    我想检查 Woocommerce 产品是否是在不到 60 天前创建的 如果属实 请做点什么 我正在使用官方 Woocmerce 功能获取在后端 管理中创建产品的日期 product gt get date created 我的代码部分有效
  • Magento - 将媒体库属性添加到产品平板中

    如何将 media gallery 属性类型添加到产品平面表中 以便可以在产品列表中使用它 可以通过将 用于产品列表 定义为 是 来添加它们 完成此操作后 您将需要重新索引产品平面 编辑 请参阅解决方案以获取最终答案 Source 我可以向
  • Codeigniter 未连接到 SQL Server

    我正在尝试使用 CodeIgniter 连接到 SQL 服务器 如果我使用 sqlsrv 驱动程序 我会收到致命错误消息 如果我使用 odbc 驱动程序 我会收到 无法使用提供的设置连接到数据库服务器 错误消息 有谁知道如何解决这个问题 我
  • Laravel 使用 Monolog\Handler\BrowserConsoleHandler 进行日志记录

    How can 拉拉维尔 5的日志记录更改为Monolog Handler BrowserConsoleHandler What doesn t在 Laravel 5 中工作但是does在独立的 PHP 文件中工作 use Illumina
  • 你能帮助我更好地理解 PHP 类吗?

    我是一个学习速度很慢的人 我想在编码方面 我已经学习 PHP 几年了 但我仍然不理解类 所以是时候我付出一些努力 至少更好地理解它们了 我凡事都使用函数 人们经常在这里对我发表评论 他们不敢相信我有一个社交网站 而且我不使用课程 我真的不明
  • 如何使用 DbSession 在 Yii2 中创建用户会话管理系统 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 今天 当我想为我的网站创建用户个人资料页面并希望创建系统用户可以管理他在此系统中的活动会话时 需要 查看活动会话 浏览器和平台 查看当
  • WordPress 中的多词搜索不显示搜索结果

    我自定义了一个主题 但在使用多词查询的搜索结果时遇到一些问题 网站上线时间为www aetterworldbydesign com http abetterworldbydesign com 搜索单个单词 http www abetterw
  • YouTube API 观看私人视频

    我有一个具有草稿模式的网站 有人可以登录并查看该网站的外观 以便在公众看到该网站之前批准该网站 我在一个帐户上有一些 YouTube 视频 但我将其设为私人帐户 因为我不想让全世界看到它们 不过 我确实希望登录草稿模式的人能够观看私人嵌入内
  • PHP 会话混乱

    好吧 我已经很困惑了 我有一个存储在会话中的对象 我可以向该对象添加项目 到目前为止非常简单 我像这样初始化对象 template new Template mysqli SESSION template serialize templat
  • 数组初始化中的正确缩进,PDT/Zend Studio

    我在代码中使用以下样式的数组初始化 a array one gt 123 two gt 456 但在这种情况下 PDT Zend Studio 无法正常工作 按 Return 键后 它将光标置于 a 下方 在我的示例中 并忽略缩进 如果数组
  • 重定向至 2 页

    我有一个 PHP 页面 我想先将其重定向到一个页面 例如 google com 然后再重定向到另一个页面 例如 bing com 为此 我使用以下方法 header Location http google com header Locat
  • Laravel 搜索路由和控制器

    我正在构建我的第一个基本 Laravel Web 应用程序 在学习了一些教程之后 这是我自己修改的第一个应用程序 我在路由到控制器然后获取正确的网址时遇到了一些麻烦 理想情况下 此时我应该只有两条路线 and user 在主页上 您可以通过

随机推荐

  • ValueError:行索引为 65536,.xls 格式不允许

    目前 我正在尝试使用 xlwt 编辑现有的 Excel 文件 我不想直接在excel上编辑 所以我先复制一份 new wb xlutils copy file location 在此副本中 我使用 xlwt 模块将新列写入新复制的 Exce
  • 搁置在 TortoiseSVN 中?

    我已经在当前公司从 TFS 迁移到 SVN TortoiseSVN 我真的很怀念TFS的 搁置 功能 我读过各种关于如何使用 SVN 搁置 的文章 但我没有读过任何可以为 搁置 工作提供非常简单体验的文章 理想情况下 我希望将额外的项目添加
  • 验证 Instagram 时不会重定向到回调 URL

    我的 Instagram 服务器端登录流程遇到问题 我在用 passport js passport instagram 在我的 Node js 服务器的域中example com 一个简单的WebView在我的安卓客户端中 问题是有时输入
  • 如何使用 Gradle API 获取 Android Studio 主 SourceSet?

    我正在为 Android Studio 开发一个 gradle 插件 这是我的问题如何使用 Gradle API 获取 Android Studio 主 SourceSet 我想用 java 源目录做一些复制工作 在问这个问题之前 我发现了
  • iTunes Connect 提交审核 - 无法保存您的应用程序信息。再试一次

    当我尝试提交应用程序的新版本以供审核时 我收到此错误消息 虽然我已经看到有关此错误消息的其他线程 但所提供的解决方案对我不起作用 而且我还没有看到任何提及我收到的实际服务器错误消息 iTunes Connect 响应以下错误消息 Error
  • 我如何知道在 python 中使用 OpenCV 检测到的白色区域的位置?

    例如 在这段代码中 我过滤了视频源以显示白色区域 我如何知道他们的位置 坐标 x y import cv2 import numpy as np cap cv2 VideoCapture 0 while 1 frame cap read h
  • 如何根据特定行中的值对 numpy 数组进行排序?

    我想知道如何根据其中一列中的值对整个数组进行排序 I have array 5 2 8 2 4 and array 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
  • 如何简洁地写一个 || b 其中 a 和 b 是可选值?

    我对任何语言的答案都很满意 但我最终想要 Java 的答案 Java 8 没问题 不限于 Java 8 我尝试修复标签 如果我有两个Optional
  • 使用 HTTP 访问数据库对象

    是否可以使用 HTTP 访问数据库对象SQL Server 2012它的完成方式是使用SQL Server 2000 我提到了下面的文章 但它是关于SQL Server 2000 使用 HTTP 访问数据库对象 http technet m
  • Python:如何模拟kafka主题进行单元测试?

    我们有一个消息调度程序 它会根据消息属性生成一个哈希键 然后将其与该键一起放入 Kafka 主题队列中 这样做是为了重复数据删除的目的 但是 我不确定如何在不实际设置本地集群并检查其是否按预期执行的情况下测试此重复数据删除 在线搜索用于模拟
  • 从 AWS CLI 工具获取 AWS 帐号的快速方法?

    寻找一种快速获取我的帐号的方法 我最初想到使用aws iam get account authorization details max items 1但这样做有几个问题 有没有办法做到这一点 可能不会跨帐户来源 您可以从以下位置获取帐号安
  • IE 和 Socket.io 兼容性

    我做了一些聊天示例 如下所示 http psismike com 2011 09 node js and socket io chat tutorial http psitsmike com 2011 09 node js and sock
  • 如果我的 php 不符合条件,如何使它不将表单数据发送到 mysql?

    我试图让我的网站在表单字段为空时显示错误消息 如果有 我想我确实这样做了 但它不会输出任何错误消息 它只是将空行添加到我的数据库列中 我应该补充一点 这是一种混合和匹配 我确实为此付出了努力 但我没有从头开始或任何东西 无论如何 我们非常感
  • 调用 [locationManager requestWhenInUseAuthorization] 时,警报视图会自行消失;

    我正在打电话 locationManager requestWhenInUseAuthorization 在显示MKMapView showsUserLocation YES 首先这看起来很奇怪 苹果应该处理这个问题MKMapView自动
  • 电影剪辑结束的 Flash 事件侦听器?

    任何人都可以建议影片剪辑动画结束时触发功能的最佳方式吗 我认为事件监听器可以处理这个问题 但不确定最好的方法 谢谢 保罗 有几种方法可以解决这个问题 只需从动画的最后一帧调用该函数即可 在函数的最后一帧上调度一个事件并在其他地方监听它 长而
  • C# API 返回字符串而不是 XML 包装的字符串

    我正在使用 ApiController 但无法调用返回 XML 以外的任何内容 public class GuideController ApiController AcceptVerbs GET HttpGet public string
  • 对齐类型并按值传递参数

    按值传递对齐类型或具有对齐类型的结构不适用于某些实现 这会破坏 STL 容器 因为某些方法 例如 resize 按值获取参数 我使用 Visual Studio 2008 运行了一些测试 但不完全确定按值传递何时以及如何失败 我主要关心的是
  • WPF 通过宽高比调整 UserControl 的大小

    我有一个 UserControl 并且该 UserControl 必须根据宽高比调整大小 这意味着 宽度 高度 2 1 目前我正在使用这段代码 protected override Size ArrangeOverride Size arr
  • 将方法定为最终方法的推理

    抱歉 这里有一个简单的问题 刚刚在我的笔记中发现了一些我不明白的与使方法最终相关的内容 我的笔记声称您应该将方法定为最终方法 原因如下 使得强制不变量变得不可能 字符串应该表现为字符串 我不太明白这是什么意思 有人可以帮我分解一下吗 多谢
  • PHP 7.2 - 当函数体位于字符串中时如何动态创建匿名函数

    当字符串中有函数体时 如何动态创建匿名函数 For e g user John Doe body echo Hello user myFunct function user body How do I have function body