为什么实例仍在处理卡片?即使很清楚,除经销商外,$ isDealer标签默认为false?
$cards = array('Ace','2','3','4','5','6','7','8','9','10','Jack','Queen','King');
$suits = array('Hearts','Diamonds','Spades','Clubs');
class Person {
public $isDealer = false;
public $luck = 15;
public function dealCards() {
if ($isDealer) {
global $cards;
global $suits;
for ($i = 0; $i < 5; $i++) {
$pulledcard = rand(0,count($cards)-1);
$pulledsuit = rand(0,count($suits)-1);
echo $dealt = $cards[$pulledcard] .' of '. $suits[$pulledsuit] . '<br>';
}
}
else {
return 'You\'re not a dealer';
}
}
}
class Baller extends Person { public $luck = 50; }
class Dealer extends Person { public $isDealer = true; }
$dealer = new Dealer();
$theman = new Baller();
$random = new Person();
echo $theman->dealCards(); //this should return you're not a dealer but it deals cards instead
最后一部分应该返回“你不是经销商!”但相反,它会处理卡片。实际的“经销商”也是如此。
答案 0 :(得分:5)
你想要
if ($this->isDealer) {
答案 1 :(得分:1)
$isDealer
并不代表$this->isDealer
。它意味着一个新的,隐式创建的变量。
另外,你不能覆盖那样的成员变量。
答案 2 :(得分:1)
写作时
if ($isDealer)
您没有检查您期望的变量的值。您的代码询问函数$isDealer
范围内的变量dealCards()
是否存在或是否为true / false。要检查类$isDealer
的成员变量Person
是否为true / false,您必须使用$this->isDealer
。这可以确保您在$isDealer
的范围内检查成员变量Person
,而不是在成员函数的范围内。因此,如果您使用
if ($this->isDealer)
答案 3 :(得分:0)
当你有这一行时:
class Dealer extends Person { public $isDealer = true; }
public $isDealer = true;
是否有可能覆盖Person {}类中的public $isDealer
,因为$ isDealer将永远为真?从另一个角度来看,如果这个脚本是你使用$ isDealer的唯一地方,那么可能没有必要将它定义为公共?