【发布时间】:2020-05-04 14:50:37
【问题描述】:
我正在尝试运行此代码:
$spaceMarine = new \ Imperium \ Soldier (" Gessart ");
$chaosSpaceMarine = new \ Chaos \ Soldier (" Ruphen ");
echo $spaceMarine . "\n";
echo $chaosSpaceMarine . "\n";
$spaceMarine -> doDamage ( $chaosSpaceMarine );
echo $spaceMarine . "\n";
echo $chaosSpaceMarine . "\n";
// Has to display :
Gessart the Imperium Space Marine : 50 HP.
Ruphen the Chaos Space Marine : 70 HP.
Gessart the Imperium Space Marine : 50 HP.
Ruphen the Chaos Space Marine : 58 HP.
我想知道使用命名空间是否绝对需要我在不同的文件中创建 2 个士兵类?因为我在同一个页面中完成了所有操作:
namespace Imperium;
class Soldier
{
private $_hp;
private $_attack;
private $_name;
function __construct($name, $hp = 50, $attack = 12)
{
$this->_name = $name;
$this->_hp = $hp;
$this->_attack = $attack;
}
public function getHP()
{
return $this->_hp;
}
public function setHP($hp)
{
$this->_hp = $hp;
}
public function getAttack()
{
return $this->_attack;
}
public function setAttack($attack)
{
$this->_attack = $attack;
}
public function doDamage($obj)
{
$obj = $this->_hp - $this->_attack;
}
public function __toString()
{
echo "$this->_name the Imperium Space Marine : $this->_hp";
}
}
namespace Chaos;
class Soldier
{
function __construct($name, $hp = 70, $attack = 12)
{
$this->_name = $name;
$this->_hp = $hp;
$this->_attack = $attack;
}
public function getHP()
{
return $this->_hp;
}
public function setHP($hp)
{
$this->_hp = $hp;
}
public function getAttack()
{
return $this->_attack;
}
public function setAttack($attack)
{
$this->_attack = $attack;
}
public function doDamage($obj)
{
$obj = $this->_hp - $this->_attack;
}
public function __toString()
{
echo "$this->_name __NAMESPACE__ Space Marine : $this->_hp";
}
}
use Imperium;
use Chaos;
$spaceMarine = new \Imperium\Soldier ("Gessart");
$chaosSpaceMarine = new \Chaos\Soldier ("Ruphen");
echo $spaceMarine . "\n";
echo $chaosSpaceMarine . "\n";
$spaceMarine -> doDamage ( $chaosSpaceMarine );
echo $spaceMarine . "\n";
echo $chaosSpaceMarine . "\n";
有没有办法在同一页面中完成所有操作?下面的代码不起作用它说:
可捕获的致命错误:方法 Imperium\Soldier::__toString() 必须 返回一个字符串值
我不确定完全理解命名空间..
提前谢谢大家!
【问题讨论】:
-
该错误与命名空间无关。
__toString必须返回字符串,而不是打印它。 -
你可能想看看继承,看起来你正在构建两个全新的类,每个命名空间中都有一个 - 我会认为这些是非常相似的类,也许应该有一个基类称为士兵,每个人都会扩展它并添加自己的详细信息。
-
是的,我知道你的意思,但我已经知道继承是如何工作的,我只是想更熟悉命名空间的方式
-
最后一次编辑把你的帖子搞砸了:)
-
@zeea 如果代码是机密练习,那么解决方案是不要在此处发布。解决方案不是提出问题,获得答案,然后对其进行编辑以删除代码。这是在浪费其他人的时间和精力。
标签: php class namespaces