Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP对象和类错误_Php_Class_Object_Subclass - Fatal编程技术网

PHP对象和类错误

PHP对象和类错误,php,class,object,subclass,Php,Class,Object,Subclass,在我开始的PHP课程中,我们第一次尝试对象和类。我的作业问题是: 创建(a)一个名为“人类”的父类(又名“超类”),其中一个变量名为“legs”,另一个函数(又名“method”)名为“walk”,(b)将“legs”的默认值设置为2,以及(c)调用“walk”函数时,使其显示“Human can walk.” 创建(a)名为“Kids”的子类(也称为“子类”),该子类将继承“Human”类的所有成员,(b)创建Kids类的变量“hands”,并将其默认值设置为2,以及(c)创建Kids类的名为

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

  • 创建(a)一个名为“人类”的父类(又名“超类”),其中一个变量名为“legs”,另一个函数(又名“method”)名为“walk”,(b)将“legs”的默认值设置为2,以及(c)调用“walk”函数时,使其显示“Human can walk.”
  • 创建(a)名为“Kids”的子类(也称为“子类”),该子类将继承“Human”类的所有成员,(b)创建Kids类的变量“hands”,并将其默认值设置为2,以及(c)创建Kids类的名为“jump”的函数,该函数显示消息“kid可以跳跃”
  • 创建一个名为“Kuma”的“Kids”类对象,(c)使用“Kuma”对象显示腿的数量并调用“walk”函数
  • 结果应打印:

    两条腿

    人类可以走路

    双手

    孩子会跳

    这是到目前为止我的代码。我对#3中的说明很难理解

    类人类{
    var$legs=2;
    var$content=“人类可以行走。

    ”; 功能行走($Kuma){ echo$this->legs.“legs”; echo$this->content; } } 班级儿童扩展了人类{ var$hands=2; var$content2=“孩子可以跳。

    ”; 函数跳转($Kuma){ echo$this->hands; echo$this->content2; } } $obj=新孩子(库马); $obj->步行(库马); ?>
    您在示例中做了一些奇怪的事情。例如,根据您给出的说明,我不知道您为什么希望步行和跳跃方法输出有关手和腿的信息

    以下是我的建议:

    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
      )。老实说,良好的编码实践也会将类属性(legs/arms)声明为受保护的,并且只能通过getter/setter使用
    • 我没有在类中强制任何HTML格式(在我的示例中,我实际上只使用了行尾字符,可以用HTML换行符或段落或任何您可能需要的字符来替代)。我可能实际上甚至不会让类本身在调用方法时负责输出,除非明确要求这样做。(我只需返回原始文本的
      并让调用者确定输出的格式)
    • 我从步行/跳跃中移除手/腿输出。这与这些方法无关,不应混用

    $Kuma=新孩子()$库马->步行()尽管术语“name”在您的说明中用于两种不同的上下文(类名和实例名),但我认为对“Kuma”的要求是为实例命名:
    $Kuma=new Kids()
    首先,您应该开始在代码中进行缩进@MarkBaker,我试着使用
    $Kuma=newkids()$库马->步行()错误消失了,但我无法获得最后两行输出:“双手”和“小孩可以跳”。建议?@MarkBaker哇,谢谢!就这么简单。还在学习…嘿,90'人打电话来了,他们想要回他们的语法。@Jeffrey-见第一句。@J.D.我在$Kuma=new Kids()的建议中添加了:$Kuma->Walk();但是输出不包括最后两节两手和一个孩子能跳的时间。思想?@Jeffrey,这证明了我来这里是为了学习……而不是为了critisized@CoPoPHP这是个笑话。别那么难过。但是认真地说,忘记
    var
    ,记住始终使用
    private
    protected
    public
    指定函数和变量的访问。
    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
    
    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();