【问题标题】:PHP Objects and classes errorPHP 对象和类错误
【发布时间】:2013-11-29 21:46:31
【问题描述】:

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

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

结果应该打印出来:

两条腿

人类可以走路。

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);

?>

【问题讨论】:

  • $Kuma = new Kids(); $Kuma-&gt;Walk();
  • 虽然“名称”一词在您的说明中用于 2 个不同的上下文(类名称和实例名称),但我认为“Kuma”的要求是为实例命名:$Kuma = new Kids()
  • 首先,你应该开始在你的代码中缩进!
  • @MarkBaker,我尝试使用$Kuma = new Kids(); $Kuma-&gt;Walk(); 错误消失了,但我无法得到最后两行输出:“2 hands”和“A child can jump”。有什么建议吗?
  • @MarkBaker 哇,谢谢!就这么简单。还在学习中...

标签: php class object subclass


【解决方案1】:
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

【讨论】:

  • 嘿,90 后,他们想要恢复他们的语法。
  • @Jefffrey - 见第一句话。
  • @J.D.我在建议中添加了 $Kuma = new Kids(): $Kuma -> Walk();但输出不包括 2 Hands 和 A Kid can jump 的最后两句。想法?
  • @Jefffrey,这证明了我为什么来这里学习......不要被批评
  • @CoPoPHP,这是个笑话。别那么难受。但说真的,忘记var 并记住始终使用privateprotectedpublic 指定函数和变量的访问权限。
【解决方案2】:

您在示例中做了一些奇怪的事情。例如,根据您给出的说明,我不知道为什么要让 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)。老实说,良好的编码习惯还将类属性(腿/手臂)声明为 protected,并且只能通过 getter/setter 获得。
  • 我没有在类中强制执行任何 HTML 格式(实际上我在示例中使用了行尾字符,可以用 HTML 换行符或段落或您可能需要的任何内容替换)。在调用方法时,我可能实际上什至不会让类本身负责输出,除非是明确要求的。 (我会简单地完成原始文本的return 并让调用者确定输出格式)。
  • 我移除了步行/跳跃的手/腿输出。这与那些方法无关,不应混用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-22
    • 2013-07-03
    • 2016-08-26
    • 2011-06-20
    相关资源
    最近更新 更多