PHP:类函数在一个文件中起作用,但在另一个文件中不起作用

我正在使用 PHP 制作一个 Telegram 机器人。我有 bot.php、filter.php 和 test.php。


我希望我的机器人向用户发送一条包含 ID 的消息。我有一个 Filter 类,并且我的 filter.php 中有一个带有正则表达式模式的函数来检测此 id,并且我正在使用 preg_match 来获取匹配项。


public function getID($string) {

    $pattern = "/e0(\d){6}\b/i";

    preg_match($pattern, $string, $matches);

    return $matches[0];

}

在我的 test.php 中,我使用该函数,它能够向我回显匹配项。


<?php

include __DIR__ . './filter.php';

$check = new Filter();    

$pattern = "/e0(\d){6}\b/i";

$text = "hi e0000000";

echo "id: ".$check->getID($text);

?>

在我的 bot.php 中,我尝试使用相同的函数发送消息,但它不起作用。(sendMsg 函数只是对 Telegram Bot API 的简单curl http 请求)


include __DIR__ . './filter.php';

$filter = new Filter();

function handleGoodMessage($chatId, $text) {

  $report = "Message '".$text."' passed the filters.\nID: ".$filter->getID($text);

  sendMsg($chatId, $report);

}

相反,每当调用该函数时,机器人都会返回 500 内部服务器错误。


请帮忙。


Qyouu
浏览 79回答 1
1回答

慕的地6264312

$filter无法在函数内部访问。$filter = new Filter(); //<--- filter is here, in the outer scopefunction handleGoodMessage($chatId, $text) {&nbsp; $report = "Message '".$text."' passed the filters.\nID: ".$filter->getID($text);&nbsp;&nbsp;&nbsp;&nbsp; //this scope is inside the function, $filter does not exist here&nbsp; sendMsg($chatId, $report);}这在测试中有效,因为您不更改范围。你需要$filter传入- - - 更新 - -就我个人而言,我总是依赖注入而不是使用,globals所以我的偏好是重新定义函数,如下所示:function handleGoodMessage($chatId, $text, $filter) {&nbsp; &nbsp; &nbsp; $report = "Message '".$text."' passed the filters.\nID: ".$filter->getID($text);&nbsp;&nbsp; &nbsp; &nbsp; sendMsg($chatId, $report);&nbsp; &nbsp; }我可能(冒着让某些人不安的风险)将其getID定义为 a static function,因为它并没有真正交互任何东西,没有使用任何成员变量,只是处理一个字符串并返回它。那么global你可以说,而不是注入它,或者使用它function handleGoodMessage($chatId, $text) {&nbsp; &nbsp; &nbsp; $report = "Message '".$text."' passed the filters.\nID: ".Filter::getID($text);&nbsp;&nbsp; &nbsp; &nbsp; sendMsg($chatId, $report);&nbsp; &nbsp; }
打开App,查看更多内容
随时随地看视频慕课网APP