用PHP 5.4替换:: class

时间:2016-08-31 20:49:28

标签: php composer-php php-5.4

我使用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,但答案中提供的示例并没有给我一些如何使用它的线索。

2 个答案:

答案 0 :(得分:3)

您只需要使用类的完全限定名称替换数组值。 假设类Example具有名称空间foo\bar而不是写Example::class只需写foo\bar\Example

答案 1 :(得分:3)

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

例如:

protected static $classmap = [
    'getTransactionResult' => 'Namespace\of\the\class',
]

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