草庐IT

Reflection

全部标签

PHP - 用于拦截方法调用的 runkit 替代品

我有一些非常不适合测试的代码(至少可以说)需要测试。不幸的是,重构不是一种选择。我必须按原样测试代码,不能更改它。为此,我考虑拦截函数调用并动态更改它们的作用,以便我可以运行测试,因为我需要一些函数和方法来返回已知值,并且我需要其他函数和方法来发出请求、连接到数据库等,以停止这样做并返回我需要它们返回的内容。没有runkit_method_redefine()有没有办法做到这一点?,最好不是“实验性的”并且仍然保持?也许是runkit的替代品?也许有更好的方法?编辑:如果我需要该功能,将使用PHPUnit的测试替身和PHP5.3.2的功能来使私有(private)方法可访问。

PHP 获取静态方法

我想通过var调用类方法(像这样):$var="read";$params=array(...);//someparameterif(/*MyClasshasthestaticmethod$var*/){echoMyClass::$var($params);}elseif(/*MyClasshatanon-staticmethod$var*/){$cl=newMyClass($params);echo$cl->$var();}elsethrownewException();我在php手册中阅读了如何获取类的函数成员(get_class_methods)。但我总是让每个成员都没有信息,无

php - 为什么在调用反射方法时按引用传递变量不起作用?

我的函数prepare()定义如下:privatefunctionprepare(&$data,$conditions=null,$conditionsRequired=false)我测试的时候,这个/***@covers/data/DB_Service::prepare*@uses/inc/config*/publicfunctiontestNoExceptionIsRaisedForValidPrepareWithConditionsAndConditionsRequiredArguments(){$method=newReflectionMethod('DB_Service','

PHP运行时类修改

所以我希望能够在运行时添加/删除类方法。在你告诉我在oop中这是可怕的做法之前,它可能是,但我真的不在乎。我希望能够做到这一点的原因是因为我希望应用程序非常模块化,因此一些插件可以扩展一些基类并向其添加方法而不会杀死主应用程序。例如,假设我有以下类(class):classUser{protected$Id;protected$Name;protected$Password;protected$PostsPerPage;}并且说,某些插件增加了用户更改其可见性设置的可能性,向类添加了$Visible属性。该类将变为:classUser{protected$Id;protected$Na

php - Laravel 5 实现多个 Auth 驱动程序

概要我正在构建一个至少具有两级身份验证的系统,并且两者在数据库中都有单独的用户模型和表。在google上快速搜索一下,到目前为止唯一的解决方案是使用MultiAuth包,该包在Auth上插入多个驱动程序。我的目标我正在尝试删除相当简单的Auth。但我希望CustomerAuth和AdminAuth根据config/customerauth.php和config\adminauth.php 最佳答案 解决方案我假设您有一个可用的包。在此示例中,我的供应商命名空间将只是:Example-所有代码片段都可以按照说明找到。我将config/

PHP 反射 : How to know if a method/property/constant is inherited from trait?

我想从列表中排除特征的所有继承方法未在类中被覆盖那么如何知道一个类成员是否继承自trait?是的,我可以这样检查:if($trait->hasMethod($methodName)||$ref->getTraitAliases()[$methodName]!==null){//}但是如果类中的trait方法被重写了怎么办?怎么知道呢?一种方法是检查方法体是否相似,如果是,我可能会排除它,但是否有更好的方法来实现这一点? 最佳答案 一个更简单的方法是ReflectionMethod::getFileName()。这将返回特征的文件名,

PHP 反射 - 获取方法参数类型作为字符串

我正在尝试使用PHP反射根据Controller方法中的参数类型自动动态加载模型的类文件。这是一个示例Controller方法。这是我目前所拥有的。//Targetthefirstparameter,asanexample$param=newReflectionParameter(array('ExampleController','PostMaterial'),0);//Echothetypeoftheparameterecho$param->getClass()->name;这有效,并且输出将如预期的那样为“SteelSlugModel”。但是,模型的类文件可能尚未加载,并且使用g

java - 在 Android 中使用反射是一个糟糕的设计吗?

我是Android开发新手。我有一个关于在Android中使用反射API的问题。例如,我可以写一些这样的代码来连接蓝牙:try{MethodconnectMethod=proxy.getClass().getDeclaredMethod("connect",BluetoothDevice.class);if(!((Boolean)connectMethod.invoke(proxy,device))){Log.i(TAG,"Unabletostartconnection");}else{Log.i(TAG,"ConnectionSuccessful");}}catch(Exceptio

java - 以编程方式获取 WebView 实现

用户当然可以选择使用哪个WebView实现,如解释的那样here.是否有可能以编程方式确定他们选择了哪种实现?我知道有可能gettheUser-Agentstring以编程方式,但这不是完全相同的信息。在上面的示例中,我想知道“ChromeStable”已被选为WebView实现。在某些用户设备上,显然还有一个选项可以从列表中选择“AndroidWebView”,即使Chrome也是一个选项,即使AndroidWebView在系统应用列表中被禁用。这很麻烦,因为大概Android系统WebView将不会收到进一步的更新(它将停留在过去),而Chrome将收到更新并且是作为WebView

android - 从 Android 中的外部 native 可执行文件调用 java 代码

这就是我想做的。我有一个由我的Activity生成的第三方native可执行文件。Activity和native可执行文件通过TCP进行通信。问题是-第三方应用程序正在使用libusb因此需要root。所以我认为实际上可以编写一个包装器libusb-java,它具有与原始libusb相同的接口(interface),但使用AndroidUSBHostAPI。因此,我可以将我正在运行的可执行文件与我的libusb-java链接起来,而不更改它,它会使用AndroidUSBHostAPI。问题是,如果我想编写libusb-java,我需要能够从库内部访问JVM(它将在第三方可执行文件启动时