标签: classname

如何找出闭包绑定到的对象的类名?

我有一些第三方代码,它创建一个闭包,然后将其绑定到一个对象。闭包对象上的 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 来访问所有已注册的钩子,但现在我需要一种方法来唯一标识我想要取消钩子的闭包,如果有一种方法可以访问闭包的绑定对象,这可能是一项简单的任务。

php oop closures classname

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

在类变量中存储类名而不键入类的名称?

在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)

这甚至可能吗?

python class classname

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

如何使用 Selenium 和 Python 定位具有多个类名的元素

我试图单击以下类名 equals 的元素"clean right"

<li class="clean right"></li>
Run Code Online (Sandbox Code Playgroud)

我怎样才能通过使用找到它driver.find_element_by_class_name()

python selenium xpath classname css-selectors

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

为什么这个 __METHOD__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)

c++ classname

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

为什么Class.forName()对我不起作用?

我正在尝试从变量中实例化一个类,并编写了一些测试代码.但是,不幸的是,它无法正常工作.这是代码:

Object co1 = new CommandDownloadHttp();
Class cc1 = Class.forName("CommandDownloadHttp");
Object co = cc1.newInstance();
Run Code Online (Sandbox Code Playgroud)

不幸的是,在第二线它崩溃了java.lang.ClassNotFoundException.

你能告诉我我做错了什么吗?

java class instantiation classname

2
推荐指数
1
解决办法
929
查看次数

如何避免Java中的类和包之间的名称冲突?

我有两个项目,MainCore.我有一个名为com.package.Sample(及其内容)Sample的包和一个名为package 的类com.package.如果我要将两者都包括在内Main,我会遇到一个无法解决的错误 - 在我的实际情况中,它是Sample无法解决的类.我们有构建的ant脚本,并且一直有效.

然而,仔细检查什么要求每一个项目,我发现我可以在包移动com.package.SampleCore连同其依赖关系均Main.在Sample类属技术上里面Main,所以我没把它移走.这使我能够在Eclipse中成功构建.

我想知道几件事:

  • 这在大型项目中很常见吗?
  • 对于这种情况,最好的方法是什么?在研究冲突之前,我认为最好的解决方案是重新考虑这个Sample课程.
  • 但是,如果我不能动弹包装com.package.Sample出来的Main.我该怎么办?或者这是一个永远不会建立的情况?

java naming-conventions classname package

2
推荐指数
1
解决办法
5260
查看次数

奇怪的小错误

这是我有一个错误:

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)

c++ compiler-errors classname

2
推荐指数
1
解决办法
122
查看次数

Java api - 以_ [下划线]开头的类名

我很想知道这是因为它们是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

java api classname

2
推荐指数
2
解决办法
4113
查看次数

从类引用中获取类名称空间和名称,而不更改我的类

在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__方法的解决方案.

php reference classname

2
推荐指数
1
解决办法
4210
查看次数

从classname创建一个swift2类

我是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

init classname viewcontroller swift

2
推荐指数
3
解决办法
6226
查看次数