我将这个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
。