我在php文件中具有匿名功能,例如
translation.php
$translateString = function($msg) use ($data) {
return $msg;
}
我将 translation.php 包含在我的一个班级文件中,例如 base.php
<?php
include "translation.php"
Class base {
public function translateString($msg) {
return $translateString($msg);
}
}
我正在通过ajax调用该函数。
like: GetData.php 像这样调用ajax:https://example.com/GetData.php
<?php
session_start();
header('Content-Type: application/json');
include 'classes/Autoload.php';
function getTest() {
$test = new Base();
return $test->d();
}
$request_clean = clean($_REQUEST);
$response = call_user_func($request_clean['func'], $request_clean);
echo json_encode($response);
?>
那时我在 GetData.php 文件中包含 Autoload.php 文件时,会发生此错误。
如果我仅包含 Base.php ,而没有没有问题
Autoload.php
<?php
function ClassesAutoload($classname)
{
//Can't use __DIR__ as it's only in PHP 5.3+
$filename = dirname(__FILE__).DIRECTORY_SEPARATOR.$classname.'.php';
if (is_readable($filename)) {
include $filename;
}
}
if (version_compare(PHP_VERSION, '5.1.2', '>=')) {
//SPL autoloading was introduced in PHP 5.1.2
if (version_compare(PHP_VERSION, '5.3.0', '>=')) {
spl_autoload_register('ClassesAutoload', true, true);
} else {
spl_autoload_register('ClassesAutoload');
}
} else {
function __autoload($classname)
{
ClassesAutoload($classname);
}
}
在这种情况下,我会收到类似以下错误:
未捕获的错误:函数名称必须是字符串
我尝试了很多修复示例,这些示例在SO和其他网站中提供。
就像其中之一是
public function translateString($msg) {
return $translateString[$msg]; //replaced () to []
}
具有上述解决方案错误的消失了,但是没有传递参数值。