PHP对象和类错误

时间:2013-11-29 21:46:32

标签: php class object subclass

在我开始的PHP课程中,我们第一次参加了对象和课程。我的作业问题是:

  1. 创建(a)名为“Human”的父类(又名“超类”),其中一个名为“legs”的变量和一个名为“walk”的函数(又名“method”),(b)设置默认值“腿“到2”,并且(c)使“行走”功能显示“人类可以行走”。当它被召唤时。
  2. 创建(a)名为“Kids”的子类(也称为“子类”),它将继承“Human”类的所有成员,(b)创建Kids类的变量“hands”并设置其默认值为2,并且(c)创建一个名为“jump”的Kids类,该类显示一条消息“孩子可以跳。”
  3. 创建名为“Kuma”的“Kids”类的对象,(c)使用“Kuma”对象显示腿的数量并调用“walk”功能。
  4. 结果应该打印出来:

    2条腿

    人类可以走路。

    2手

    小孩可以跳。

    到目前为止,这是我的代码。我对#3中的说明感到困难。

    class Human {
    var $legs = 2;
    var $content = "<p>Humans can walk.</p>";
    
    function Walk($Kuma) { 
        echo $this->legs . " legs";
        echo $this->content;
    }
    }
    
    class Kids extends Human {
    var $hands = 2;
    var $content2 = "<p>A kid can jump.</p>";
    
    function Jump($Kuma) {
        echo $this->hands;
        echo $this->content2;
    
    }
    }
    
    $obj = new Kids(Kuma);
    $obj -> Walk(Kuma);
    
    ?>
    

2 个答案:

答案 0 :(得分:0)

class Human {
    var $legs = 2;
    var $content = "<p>Humans can walk.</p>";

    function Walk() { 
       echo $this->legs . " legs";
       echo $this->content;
    }
 }

 class Kids extends Human {
     var $hands = 2;
     var $content2 = "<p>A kid can jump.</p>";

     function Jump() {
        echo $this->hands;
        echo $this->content2;
     }
 }

$kuma = new Kids(); // creating OBJECT kuma 

$kuma -> Walk(); // calling the walk function

?>

例如:

$object = new Human(); // creating OBJECT named object of CLASS Human

答案 1 :(得分:0)

您在示例中做了一些奇怪的事情。例如,根据您给出的说明,我不知道为什么您希望Walk和Jump方法输出有关手和腿的信息。

这是我的建议:

class Human {
    public $legs = 2;
    public function walk() { 
        echo 'Human can walk.';
    }
}


class Kids extends Human {
    public $hands = 2;
    public function jump() {
        echo 'A kid can jump.';
    }
}

$Kuma = new Kids();
echo $Kuma->legs . " legs\n";
$Kuma->walk();
echo "\n";
echo $Kuma->hands . " hands\n";
$kuma->jump();

有几点需要注意:

  • 我在声明变量和方法范围时使用了良好的编码实践(在本例中为public)。老实说,良好的编码实践也可以将类属性(leg / arms)声明为protected,并且只能通过getter / setter提供。
  • 我没有在类中强制执行任何HTML格式化(我实际上只使用了我的示例中的行尾字符,可以用HTML换行符或段落或者您可能需要的任何内容替换)。在调用方法时,我可能实际上甚至没有让类本身负责输出,除非明确要求。 (我会简单地完成原始文本的return并让调用者确定输出的格式。)
  • 我从步行/跳跃中移除手/腿输出。这与这些方法无关,不应混用。