在 PHP 5.4 中替换 ::class
Replacing ::class in PHP 5.4
我正在使用 this Composer package 进行需要此包提供的功能的开发。在寻找替代方案时,我发现这是我最好的选择,因为可用的替代方案过于简单,无法在我处理的时间限制下实施。
现在,我已经在本地机器上测试了它 运行 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 不兼容,并且在尝试执行 , I had the results .
时
现在,到目前为止,我已经评论了有问题的行(都是 array
包含这些 ::class
定义),在生产服务器上进行了测试,到目前为止可以正常工作。但我想知道这个 ::class
定义是否有实际的替代品。
重要说明:我在网上看到的例子中提到 get_class('ClassName')
指的是 ClassName::class
,而不是 classMethod::class
个案。我也 运行 进入 ,但答案中提供的示例并没有告诉我如何使用它。
您只需将数组值替换为 classes 的完全限定名称。
假设 class Example
有命名空间 foo\bar
而不是写 Example::class
只写 foo\bar\Example
.
::class
return class 的完整命名空间。您可以改为编写完整的名称空间。在一些新包中,最好将命名空间提供给 class 并在需要时在 class 中创建实例。 ::class
更短,也更舒适。
例如:
protected static $classmap = [
'getTransactionResult' => 'Namespace\of\the\class',
]
这要长得多,当你在那个位置遇到这样的问题时,我相信你在使用新包时会遇到更多问题。
我正在使用 this Composer package 进行需要此包提供的功能的开发。在寻找替代方案时,我发现这是我最好的选择,因为可用的替代方案过于简单,无法在我处理的时间限制下实施。
现在,我已经在本地机器上测试了它 运行 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 不兼容,并且在尝试执行
现在,到目前为止,我已经评论了有问题的行(都是 array
包含这些 ::class
定义),在生产服务器上进行了测试,到目前为止可以正常工作。但我想知道这个 ::class
定义是否有实际的替代品。
重要说明:我在网上看到的例子中提到 get_class('ClassName')
指的是 ClassName::class
,而不是 classMethod::class
个案。我也 运行 进入
您只需将数组值替换为 classes 的完全限定名称。
假设 class Example
有命名空间 foo\bar
而不是写 Example::class
只写 foo\bar\Example
.
::class
return class 的完整命名空间。您可以改为编写完整的名称空间。在一些新包中,最好将命名空间提供给 class 并在需要时在 class 中创建实例。 ::class
更短,也更舒适。
例如:
protected static $classmap = [
'getTransactionResult' => 'Namespace\of\the\class',
]
这要长得多,当你在那个位置遇到这样的问题时,我相信你在使用新包时会遇到更多问题。