我使用this Composer package进行需要此程序包提供的功能的开发。寻找替代方案,我发现这是我最好的选择,因为在我处理的时间限制内,可用的替代方案太过准确。
现在,我已经在运行PHP 5.5的本地计算机上(在 Linux子系统for Windows 10 上)在运行PHP 5.6的个人服务器上测试了它,但生产服务器正在运行PHP 5.4,由于原因无法升级。
首先我遇到了这个错误:
Parse error: syntax error, unexpected 'class' (t_class), expecting identifier (t_string) in …
正在寻找我点击this question的解决方案,所以我转到了包裹代码并找到了以下代码段:
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不兼容,在尝试执行what the answer to the question suggested时,我得到了结果in this commentary to that answer。
现在,到目前为止,我已经评论了有问题的行(两者都是包含这些array
定义的::class
),在生产服务器上进行了测试,并且到目前为止一直有效。但我想知道是否真的替换了这个::class
定义。
重要说明:我在网上看到的示例谈到get_class('ClassName')
引用ClassName::class
,而不是classMethod::class
个案例。我也遇到了this question,但答案中提供的示例并没有给我一些如何使用它的线索。
答案 0 :(得分:3)
您只需要使用类的完全限定名称替换数组值。
假设类Example
具有名称空间foo\bar
而不是写Example::class
只需写foo\bar\Example
。
答案 1 :(得分:3)
::class
返回该类的完整命名空间。您可以编写完整的命名空间。在一些新的包中,如果需要,最好将命名空间赋给类并在该类中创建实例。 ::class
更短,更舒适。
例如:
protected static $classmap = [
'getTransactionResult' => 'Namespace\of\the\class',
]
这个时间要长得多,当你在那个位置遇到这样的问题时,我确信你在使用新包装时会遇到更多问题。