相关疑难解决方法(0)

在PHP中将静态方法作为参数传递

在PHP中可以做这样的事情:

myFunction( MyClass::staticMethod );
Run Code Online (Sandbox Code Playgroud)

这样'myFunction'将引用静态方法并能够调用它.当我尝试它时,我得到一个"Undefined class constant"(PHP 5.3)的错误,所以我想这不是直接可能的,但有没有办法做类似的事情?我到目前为止最接近的是将"函数"作为字符串传递并使用call_user_func().

php static class

32
推荐指数
4
解决办法
1万
查看次数

在PHP中记录所有Soap请求和响应

有谁知道如何使用PHP内置的SoapClient记录所有请求和响应?我其实可以手动登录的一切SoapClient::__getLastRequest()SoapClient::__getLastResponse(),但我们有我们的系统很多SOAP请求,我正在寻找其他的可能性.

注意:我正在使用wsdl模式,因此使用隧道全部通过的方法SoapClient::__soapCall()不是一个选项

php soap

10
推荐指数
3
解决办法
1万
查看次数

在PHP中输入安全的通用装饰器

我想创建一个类型安全的通用日志装饰器

我有许多存储库(接口),每个存储库都需要一个装饰器,以捕获它们可能抛出的异常,将其传递给LoggerInterface的实例,然后重新抛出它们。可以创建一个专用的装饰器并为每个装饰器进行测试,尽管这非常麻烦(尤其是很好地进行了测试),但我还是避免了。

使用__call创造一个更通用的装饰是,想到的第一种方法。但是,这将导致对象实例无法实现其装饰的存储库接口。在我的项目中,这是不可行的。有没有办法告诉PHP它确实实现了此接口,例如通过使用一些魔术反射

我已经在stackoverflow上阅读了“ 如何在PHP中实现装饰器? ”和“ 在PHP 中实现用于方法结果缓存的装饰器模式的最佳方法 ”,它们都概述了专用方法和通用方法,尽管均未提供对方法的指示。以类型安全的方式执行通用方法。这些问题发布以来已经过去了一段时间,所以也许情况已经改变了。我正在使用PHP 7,并且可以根据需要使用PHP 7.1。

PHPUnit_MockObject允许通过与getMockPHPUnit中熟悉的方法调用的代码相同的代码构造实现接口的对象。这可以作为通用装饰器的基础。但是,这将需要在生产代码中使用模拟库。此外,该库在内部使用eval完成其工作。这使它不符合我的项目的资格。

php reflection types decorator

5
推荐指数
1
解决办法
570
查看次数

标签 统计

php ×3

class ×1

decorator ×1

reflection ×1

soap ×1

static ×1

types ×1