真/假....还在发牌?

时间:2013-12-09 20:19:10

标签: php

为什么实例仍在处理卡片?即使很清楚,除经销商外,$ 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

最后一部分应该返回“你不是经销商!”但相反,它会处理卡片。实际的“经销商”也是如此。

4 个答案:

答案 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的唯一地方,那么可能没有必要将它定义为公共?