获取调用其他方法的方法的名称。
我需要在另一个方法中获取方法名称,现在我正在使用它:
$crazyDinosaur = new CrazyDinosaur(300, 600);
$crazyDinosaur->attack(new NinjaCat(), __FUNCTION__);
如何在没有CrazyDinosaur
的情况下发现NinjaCat
攻击__FUNCTION__
?有可能吗?
我真正想要的是:x
触发事件。我不想再说x
触发了事件,因为事件应该知道谁在触发自己。
答案 0 :(得分:1)
您通常会有一个抽象的Actor
或Character
类,对它们进行子类化,然后创建子类的实例。例如:
<?php
abstract class Actor {}
abstract class Animal extends Actor {}
class Dinosaur extends Animal {}
如您所知,类可以具有属性。因此,一个属性可以是$type
,它包含类的字符串表示形式。因此,如果您创建了Dinosaur
的实例,则$type
可能只是dinosaur
。
现在我们有:
<?php
abstract class Animal extends Actor
{
protected $type;
}
class Dinosaur extends Animal
{
protected $type = 'dinosaur';
public function getType()
{
return $this->type;
}
}
class Cat extends Animal
{
protected $type = 'cat';
}
$crazyDinosaur = new Dinosaur();
$crazyCat = new Cat();
我认为您的问题是您已将attack()
方法附加到错误的类;我会把它附在受害者的班级上。因此,如果恐龙攻击猫,那么我会在猫类上调用attack()
方法,并将您的恐龙对象作为参数传递。这样,只要检查$attacker
是什么类型的类,就知道是什么在攻击什么。
<?php
class Cat extends Animal
{
public function attack(Actor $attacker)
{
// code here to do things like deduct cat's health etc.
}
}
$crazyDinosaur = new Dinosaur();
$crazyCat = new Cat();
$crazyCat->attack($crazyDinosaur);
您可以扩展attack
方法以接受其他参数。例如,攻击的强度可以改变它对受害者造成的伤害量。
我还建议调查Observer pattern,因为在这种情况下这是理想的。此外,PHP不是一种事件驱动的语言,因此不适合游戏。
答案 1 :(得分:0)
这个怎么样
class creature{
public $attack_strength;
public $health ;
public function attack($enemy){
$damage = $this->attack_strength;
$enemy->health -= $damage;
log_event($this->name . " attacked " . $enemy->name . " making " . $demage . " points of damage");
}
}
class NinjaCat extends creature{
}
class crazyDinosaur extends creature{
}
答案 2 :(得分:0)
我认为您正在寻找get_class($this)
:
...
function attack($victim)
{
$attacker = get_class($this);
var_dump($attacker);
}
...