在PHP 5.4中替换::类



我将这个Composer包用于需要这个包提供的功能的开发。在寻找替代方案时,我发现这是我最好的选择,因为可用的替代方案都太简陋了,无法在我正在处理的时间限制内实现。

现在,我已经在一台运行PHP 5.5的本地机器(在Linux子系统上运行Windows 10)上测试了它,在一台运行PHP 5.6的个人服务器上测试了它,但是生产服务器运行的是PHP 5.4,由于某些原因无法升级。

第一个错误是:

Parse error: syntax error, unexpected 'class' (t_class), expecting identifier (t_string) in …

在寻找解决方案时,我遇到了这个问题,所以我去了包代码,找到了以下代码片段:

protected static $classmap = [
    'getTransactionResult' => getTransactionResult::class,
    'getTransactionResultResponse' => getTransactionResultResponse::class,
    'transactionResultOutput' => transactionResultOutput::class,
    'cardDetail' => cardDetail::class,
    'wsTransactionDetailOutput' => wsTransactionDetailOutput::class,
    'wsTransactionDetail' => wsTransactionDetail::class,
    'acknowledgeTransaction' => acknowledgeTransaction::class,
    'acknowledgeTransactionResponse' => acknowledgeTransactionResponse::class,
    'initTransaction' => initTransaction::class,
    'wsInitTransactionInput' => wsInitTransactionInput::class,
    'wpmDetailInput' => wpmDetailInput::class,
    'initTransactionResponse' => initTransactionResponse::class,
    'wsInitTransactionOutput' => wsInitTransactionOutput::class
];

我发现::class定义与PHP 5.4不兼容,当我试图做这个问题的答案时,我在这个答案的评论中得到了结果。

现在,到目前为止,我已经注释了有问题的行(都是包含这些::class定义的array),在生产服务器上进行了测试,并且到目前为止工作正常。但是我想知道是否有一个实际的替代这个::class定义。

重要提示:我在网上看到的例子中,get_class('ClassName')指的是ClassName::class,而不是classMethod::class。我也遇到过这个问题,但是答案中提供的示例并没有给我如何使用它的线索。

::class返回该类的完整名称空间。您可以编写完整的名称空间。在一些新包中,如果需要的话,最好将命名空间给一个类,并在该类中创建实例。::class更短,更舒适。

例如:

protected static $classmap = [
    'getTransactionResult' => 'Namespaceoftheclass',
]

这个要长得多,当你在那个位置遇到这样的问题时,我相信当你使用新软件包时,你会遇到更多的问题。

您只需将数组值替换为类的完全限定名。假设类Example的名称空间为foobar,而不是写Example::class,而是写foobarExample

相关内容

  • 没有找到相关文章

最新更新