我有一些第三方代码,它创建一个闭包,然后将其绑定到一个对象。闭包对象上的 print_r 会产生以下结果:
Closure Object ( [this] => am4Widgets Object ( ) )
Run Code Online (Sandbox Code Playgroud)
现在我需要检索绑定对象的“instanceof”(在本例中为“am4Widgets”),某种伪代码,例如
print_r(myClosureObject instanceofboundobject am4Widgets);
Run Code Online (Sandbox Code Playgroud)
应该输出“TRUE”。
我搜索了 php.net 但没有结果。
预先感谢您的任何想法/建议。
更新:
这是创建闭包的位置(我无法修改的代码片段):
function initActions()
{
parent::initActions();
.
.
.
add_action('wp_head', function(){
$ajax_url = admin_url( 'admin-ajax.php' );
echo <<<CUT
<script>...some javascript code...</script>
CUT;
});
}
Run Code Online (Sandbox Code Playgroud)
实际上,我想做的是从 wp_head 中取消闭包,因为我需要它在页脚中。
我正在使用全局 wordpress 的 $wp_filters 来访问所有已注册的钩子,但现在我需要一种方法来唯一标识我想要取消钩子的闭包,如果有一种方法可以访问闭包的绑定对象,这可能是一项简单的任务。
在python类的实例方法中,我知道我们可以通过获取类名 self.__class__.__name__
但是,我想将类的名称存储在类变量中,而不编写类的名称.
我知道我可以这样做以将类的名称转换为类变量:
class MyClass(object):
pass
MyClass._myname = MyClass.__name__
Run Code Online (Sandbox Code Playgroud)
但是,我必须MyClass在类定义之外对字符串进行两次编码,只是为了将类名称转换为类变量.在这种情况下,那将是"MyClass",我可以简单地编码如下:
class MyClass(object):
_myname = "MyClass"
Run Code Online (Sandbox Code Playgroud)
但即使这是多余的,因为我必须"MyClass"在MyClass课堂上进行硬编码.
我想要的是以某种方式将类的名称放入类变量而不编写类的名称,如下所示:
class MyClass(object):
_myname = ???? # where ???? is a statement which returns the class
# name, in which the string "MyClass" does not appear
Run Code Online (Sandbox Code Playgroud)
这甚至可能吗?
我试图单击以下类名 equals 的元素"clean right":
<li class="clean right"></li>
Run Code Online (Sandbox Code Playgroud)
我怎样才能通过使用找到它driver.find_element_by_class_name()
这个想法来自/sf/answers/1104286361/
我在 string_view 末尾添加了一个 '\0',这样我们就可以将 data() 用于 printf、spdlog 等。
我使用这个宏来打印带有类名的函数名。
但是,我发现编译器不够智能,无法内联字符串,而是需要先进行内存复制才能堆栈:
https://godbolt.org/z/bqob37G3z
请参阅 main 函数中 CALL 和 CALLFUNC 的区别。
是否可以告诉编译器将字符串放在某个 RO 部分中,例如 const char *?
template<std::size_t N>
consteval const std::array<char, N> __get_function_name(const char * arr)
{
std::array<char, N> data {};
std::string_view prettyFunction(arr);
size_t bracket = prettyFunction.rfind("(");
size_t space = prettyFunction.rfind(" ", bracket) + 1;
size_t i;
for (i = 0; i < bracket - space; i += 1) {
data[i] = arr[space + i];
}
data[i] = '\0';
return …Run Code Online (Sandbox Code Playgroud) 我正在尝试从变量中实例化一个类,并编写了一些测试代码.但是,不幸的是,它无法正常工作.这是代码:
Object co1 = new CommandDownloadHttp();
Class cc1 = Class.forName("CommandDownloadHttp");
Object co = cc1.newInstance();
Run Code Online (Sandbox Code Playgroud)
不幸的是,在第二线它崩溃了java.lang.ClassNotFoundException.
你能告诉我我做错了什么吗?
我有两个项目,Main和Core.我有一个名为com.package.Sample(及其内容)Sample的包和一个名为package 的类com.package.如果我要将两者都包括在内Main,我会遇到一个无法解决的错误 - 在我的实际情况中,它是Sample无法解决的类.我们有构建的ant脚本,并且一直有效.
然而,仔细检查什么要求每一个项目,我发现我可以在包移动com.package.Sample到Core连同其依赖关系均Main.在Sample类属技术上里面Main,所以我没把它移走.这使我能够在Eclipse中成功构建.
我想知道几件事:
Sample课程.com.package.Sample出来的Main.我该怎么办?或者这是一个永远不会建立的情况?这是我有一个错误:
In file included from braincalc.cpp:8:0:
AbstractStack.h:43:1: error: expected class-name before â{â token
Run Code Online (Sandbox Code Playgroud)
这是我的.h:
//AbstractStack.h
#ifndef ABSTRACTSTACK_H
#define ABSTRACTSTACK_H
#include<iostream>
using namespace std;
template < typename T >
class AbstractStack
{
public:
// Purpose: clears the stack
// Postconditions: the stack is now empty
virtual void clear() = 0;
// Purpose: push an element into the stack
// Parameters: x is the value to push into the stack
// Postconditions: x is now the element at the top of the …Run Code Online (Sandbox Code Playgroud) 我很想知道这是因为它们是Java api [J2SE]的一部分.
通常,在变量名称中使用"_"来表示它们是实例变量或用于某些其他特殊目的[但是肯定地取决于程序员的口味].
但是Java API [J2SE]中列出的类很少,其名称以下划线("_")开头.
Oracle真的有这个下划线的特殊含义/目的吗?[如果是,]为什么这些类与同一API中的其他类相比有什么不同?
http://docs.oracle.com/javase/7/docs/api/
_BindingIteratorImplBase
_BindingIteratorStub
_DynAnyFactoryStub
_DynAnyStub
_DynArrayStub
_DynEnumStub
_DynFixedStub
_DynSequenceStub
_DynStructStub
_DynUnionStub
_DynValueStub
_IDLTypeStub
_NamingContextExtStub
_NamingContextImplBase
_NamingContextStub
_PolicyStub
_Remote_Stub
_ServantActivatorStub
_ServantLocatorStub
在php中,您经常检查您获得的对象是否是正确的类型.如果不是,您抛出一个带有如下消息的异常:
use My\Class\MyClass
...
if (!$object instanceof MyClass) {
throw new Exception(
sprintf(
"object must be of type '%s'",
'My\Class\MyClass'
)
);
}
Run Code Online (Sandbox Code Playgroud)
现在我将完整的命名空间和类的名称传递给sprintf.
我如何从类引用中获取它,以便我可以做这样的事情
sprintf("object must be of type '%s'", MyClass::getName())
Run Code Online (Sandbox Code Playgroud)
编辑:
我希望在不添加新方法的情况下为所有类实现此目的.所以它应该是使用一些现有方法或一种php __ MAGIC__方法的解决方案.
我是Swift的新手.
在目标C中,我从其类名推送自定义UIViewController create:
NSString *classString = "customViewController";
UIViewController *vc = [[NSClassFromString(classString) alloc] init];
[self pushViewController:vc animated:YES];
Run Code Online (Sandbox Code Playgroud)
我无法在swift中构建类,这不起作用:
let myClass = NSClassFromString("customViewController") as! UIViewController.Type
let vc = myClass.init()
self.presentViewController(vc, animated: true, completion: nil)
Run Code Online (Sandbox Code Playgroud)
错误:致命错误:在解包可选值时意外发现nil