我正在尝试将函数存储在文件中并在需要时提取以运行,但我找不到更好的方法来执行此操作。
这是我尝试过的:
function store_callable(string $func)
{
writefile($func);
}
eval(readfile());
Run Code Online (Sandbox Code Playgroud)
我首先关心的是参数的类型$func。我期望仅接收callable作为参数,但我找不到将 PHP 可调用转换为字符串以保存的方法。
其次,虽然eval()这里使用 来运行保存的函数,但我想知道是否有更好的方法来做到这一点,尽管似乎没有。
我不认为这是一种序列化,但它们似乎有相似之处,所以我仍然添加了标签。
编辑:
我最初的想法是创建一个通知系统,将消息推送到用户的特定帐户。但是,某些通知仅专门推送到一台设备或 IP。这意味着我需要一个过滤功能。我实际上可以通过使用像这样的新属性来完成此操作,restricted-to但我想filter-function在通知对象中创建一个更通用的字段,该字段返回一个布尔值,并让系统决定是否在此负载上推送通知。
编辑2:
我实际上可以直接将它们编码在PHP文件中,但这会变得混乱,因为不同的通知有不同的过滤器来决定是否推送它们,我可以给你一个例子:
new Notification("message");
class Notification
{
public function push_or_not()
{
if($this->isabout== "login" && checkIP())
{
\\ sth
}
else if()
else if()
//and so on
}
}
Run Code Online (Sandbox Code Playgroud)
这样实际上可以运行并避免安全风险。但这还不够普遍。这意味着我需要if-else首先编辑此处,并type在此处创建一个新属性。
我只是问直接存储在通知数据中的初始更通用的过滤器函数(因为我可以在每个通知中定义它,但在这里我可以添加类型并将其与类型相关联)是否更好(以及任何改进)或这里的后一个更好。
这里似乎没有太大的安全风险,因为这里的代码与用户输入无关。
php ×1