当前位置: 首页 > 知识库问答 >
问题:

在PHP5.4中替换::类

陆甫
2023-03-14

我正在使用此Composer包进行需要此包提供的功能的开发。寻找替代方案,我发现这是我最好的选择,因为可用的替代方案太简单了,无法在我处理的时间限制下实现。

现在,我已经在运行PHP 5.5的本地机器(在LinuxWindows 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定义与PHP5.4不兼容,当我尝试按照问题的答案所建议的去做时,我在这个答案的注释中得到了结果。

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

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

共有2个答案

翟迪
2023-03-14

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

周学义
2023-03-14

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

例如:

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

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

 类似资料:
  • 我正在使用一个具有许多不同库依赖关系的gradle项目,并使用新的清单合并。在我的

  • 问题内容: 我在Python中有一个SymPy表达式,我想将其复制并粘贴到Java源代码中。问题在于,对幂有不同的表示法: Java用途; Python使用。 所以我的问题是:有没有办法以“ Java格式”打印SymPy表达式? 问题答案: SymPy有几个专门用于此目的的代码打印机。虽然没有Java代码打印机,但是有一种Javascript打印机。我不能说Java和Javascript是否在每种

  • 问题内容: 我正在从hibernate4.2.17迁移到5.0.7,到目前为止效果还不错,但是似乎该方法已被弃用。我就是不能使用它了。 这是我的代码: 我替换了所有其他方法,但找不到完全替代的方法… 错误消息:该方法是未定义的交易类型 问题答案: 按照5.0 Javadoc :

  • 问题内容: 我需要在contenteditablediv中实现数字的突出显示(将来我会添加更复杂的规则)。问题是当我用JavaScript替换插入新内容时,DOM更改和contenteditablediv失去了焦点。我需要的是将div放在当前位置上,以使注意力集中在div上,这样用户就可以键入而不会出现任何问题,而我的功能只需突出显示数字即可。谷歌搜索我认为Rangy库是最好的解决方案。我有以下代

  • 问题内容: 一个非常简单的小问题,但是我不太明白该怎么做。 我需要将’_’的每个实例替换为空格,并将’#’的每个实例替换为空/空。 我已经试过了: 我真的不喜欢这样的链接命令。还有另一种方法可以做到这一点吗? 问题答案: 使用OR运算符(): 您还可以使用字符类: Fiddle 如果您想用一件事替换哈希值,而用另一件事替换下划线,则只需要链接即可。但是,您可以添加一个原型: 但是为什么不连锁呢?我

  • 我真的不喜欢这样链接命令。有没有另一种方法在一个做?