【问题标题】:Why is this object now showing anything?为什么这个对象现在显示什么?
【发布时间】:2015-03-09 14:33:59
【问题描述】:

这里有一个简单的父子类,谁能解释一下为什么这不呼应total_pages?我已经传递了价值和一切..

另一件事(不相关的问题),当我已经在父母的构造函数中传递参数时,需要将参数传递给孩子吗?继承不是意味着所有的值都会从父级派生出来吗?

谢谢。

 class Book{
    protected $total_pages;
    protected $page_type;

    function set_data($total_pages, $page_type){
        $this->total_pages = $total_pages;
        $this->page_type = $page_type;
    }
}

class Final_look extends Book{
    function preview_book(){
        echo $this->total_pages;
    }
}


$Book = new Book;
$Book->set_data(110, "thick");

$Final_look = new Final_look;
$Final_look->preview_book();

【问题讨论】:

  • 正如答案已经说过的那样,您在这里创建了两个不同的对象。您的 $Final_look 变量已经是 Book 类的子对象(因此,它具有所有属性)。您只需要创建Final_look 对象,该类已经是Book 类的扩展

标签: php oop object inheritance


【解决方案1】:

您创建了 2 个不同的对象!这两个对象没有任何关系,它们完全相互独立!

我认为你想要的是这样的:

<?php

    class Book{
        protected $total_pages;
        protected $page_type;

        function set_data($total_pages, $page_type){
            $this->total_pages = $total_pages;
            $this->page_type = $page_type;
        }
    }

    class Final_look extends Book{
        function preview_book(){
            echo $this->total_pages;
        }
    }


    $Book = new Final_look;
              //^^^^^^^^^^ create Object from 'Final_look' so you can use all functions
    $Book->set_data(110, "thick");
    $Book->preview_book();
         //^^^^^^^^^^^^ Same object which calls this function

?>

输出:

110

【讨论】:

  • 嗯,我想从子类访问父属性或方法,仅此而已。不是父对象的子对象
  • @sami7913 ^ 如果您想从父类访问父属性,那么您从子类访问父类的属性,这是矛盾的!我觉得你对 OOP 和继承有点困惑
  • 看起来你还没明白。如果您创建一个 Book 类(在本例中为父类),然后创建另一个类扩展Book 类(比方说,RedBook),当您创建一个RedBook 对象,您正在创建一个带有额外方法和属性的Book(这意味着,RedBook 是一个 Book,但Book 不一定是RedBook )。换句话说,RedBook 将保留原始 Book 类的所有属性以及您在 RedBook 类中定义的一些新属性(比如说,嗯……红色或您想要并在类)。
  • @sami7913 是的,但是你有 2 个不同的对象!只是一个简单的例子:一个类是一个计划,现在如果你创建一个对象,你就复制这个计划!现在你有一个精确的副本。但是您制作了 2 个副本,然后您尝试从第一个副本访问第二个副本上的某些内容,这是行不通的!
  • @sami7913 你在这里混合了两种不同的东西,类继承和具体对象。简而言之,no 从子类创建的对象不与从该子类的父类创建的对象共享数据。但这实际上在这些 cmets 中解释得太多了。您必须阅读有关 oop 继承的正确介绍。也许从wikipedia开始。
猜你喜欢
  • 1970-01-01
  • 2023-03-14
  • 2013-07-12
  • 1970-01-01
  • 1970-01-01
  • 2021-05-01
  • 2012-10-20
  • 1970-01-01
  • 2016-02-06
相关资源
最近更新 更多