PHP中是否有一种方法可以找出另一个对象中称为哪个方法的对象。
范例:
class Foo
{
public function __construct()
{
$bar = new Bar();
$bar->test();
}
}
class Bar
{
public function test()
{
}
}
$foo = new Foo();
有没有办法让我发现从foo对象调用了测试方法?
您可以这样使用debug_backtrace
:
顺便说一句,看看手册页上的评论:有一些有用的功能和建议;-)
class Foo
{
public function __construct()
{
$bar = new Bar();
$bar->test();
}
}
class Bar
{
public function test()
{
$trace = debug_backtrace();
if (isset($trace[1])) {
// $trace[0] is ourself
// $trace[1] is our caller
// and so on...
var_dump($trace[1]);
echo "called by {$trace[1]['class']} :: {$trace[1]['function']}";
}
}
}
$foo = new Foo();
该var_dump
会输出:
array
'file' => string '/home/squale/developpement/tests/temp/temp.php' (length=46)
'line' => int 29
'function' => string '__construct' (length=11)
'class' => string 'Foo' (length=3)
'object' =>
object(Foo)[1]
'type' => string '->' (length=2)
'args' =>
array
empty
和echo
:
called by Foo :: __construct
但是,尽管看起来不错,但我不确定它是否应该在您的应用程序中用作“正常事物” …似乎有些奇怪,实际上:设计良好的方法不需要知道它叫什么, 在我看来。
我创建了一个新的Android项目,目标是API15,使用。自动生成的是: 将添加到它失败,因为。 所以我尝试创建另一个项目,这次以27级API为目标,得到了同样的结果,我得出的结论是我需要的API是28级(并放弃了,因为我不想以如此限制的内容为目标)。有人在评论另一个问题时指出,情况并非如此,因此这个问题是双重的。 > 在哪里可以找到一个特定类针对哪个API级别?WebViewAssetLoad
问题内容: 在Bruce Eckel的“ Thinking In Java,第四版”的第428页(有关类型信息的章节)中,具有以下示例: 也许我有点累,但是我看不到add()方法中对add()的调用是如何工作的。我一直认为它应该有一个引用,或者是一个静态方法(并且我在ArrayList或List中找不到静态add())。我想念什么? 我只是为自己测试,发现这可行: 问题答案: Java为这样的方法
我的Java包中有四个类。只有一个类具有方法。 当我运行方法时,我如何运行这四个类中的所有方法? 以下是我的课程: 第一类。JAVA 第二类。爪哇 第三类。JAVA 样品。JAVA
我目前有一个代码片段,其中对于每个类别,它将找到子类别: 将递归获取一个类别的子级: 目前,使用,只检索子类别的子类别,因此如果每个子类别都有自己的子类别,则不会将其保存到子类别中。 我如何显示子子类别给我们的子类别? 我想用我的代码做的是获取一个父级,获取它的子级,然后将这些子级中的每一个视为父级,递归地获取它的子级,但是我的JSON输出并没有反映这一点。只有父对象有子对象-子对象没有子对象(尽
我想做的是在我的WooCommerce商店的侧边栏上显示一个菜单,上面有当前产品类别名称和当前类别的子项。如果产品类别没有子类,那么它应该显示父类别和父类别子类。 这是层次结构的样子:商店 当你在“准备好的食物”页面上时,你应该看到。 制备食品 苦味 Charcuterie 食品 当你在食品页面上时,你应该看到 制备食品 苦味 Charcuterie 食品 现在,我已经让它在您处于顶级类别时显示父
问题内容: 我的UI有这个课程 我有另一个类,它将设置的文本,直到我将MyFrame扩展为另一个类中的textArea。 然后,我实例化UpdateText并调用函数settext。但是该文本似乎没有出现在GUI中。 请帮忙 问题答案: 首先,除非您想要不同的行为,否则不要覆盖该方法。其次,您无需扩展任何内容。您所要做的就是按照这些简单的步骤进行操作,就可以开始工作了! 在课堂上,将以下几行放在其