clouser函数未在类文件中调用

时间:2019-05-11 07:54:44

标签: php closures autoload

我在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 []
}
具有上述解决方案错误的

消失了,但是没有传递参数值。

0 个答案:

没有答案