PHP:我可以在父母的内部定义一个新的类实例吗? class并让新实例扩展父

时间:2015-07-14 17:15:56

标签: php

我想做类似的事情:

class foo extends bar {
  private $norf = '';
  private $script;

  public function __construct(){
    $this->norf = 'blah blah';
  }

  public function qux(){
    $this->script = new someOtherClass();
    return $this->script->displayNorf();
  }
}

class someOtherClass {
    public function displayNorf(){
        return $this->norf;
    }
}

$test = new foo();
print($test->qux()); //blah blah

这个例子真的很愚蠢,但我正在寻找扩展类实例的方法。

2 个答案:

答案 0 :(得分:1)

是的,您可以在班级中创建其他班级的实例。但是,您的代码示例仅仅因为类someOtherClass不包含名为$norf的属性而无法工作。

$this指的是该类的当前实例,因此在someOtherClass->displayNorf()中,由于该类不包含名为$norf的属性,因此您将收到未定义的属性错误。

为了实现这一点,您需要将foo类的属性$norfprivate更改为protected并延长foo类通过someOtherClass类进行如下操作:

class foo extends bar {
  protected $norf = '';
  private $script;

  public function __construct(){
    $this->norf = 'blah blah';
  }

  public function qux(){
    $this->script = new someOtherClass();
    return $this->script->displayNorf();
  }
}

class someOtherClass extends foo {
    public function displayNorf(){
        return $this->norf;
    }
}

$test = new foo();
print($test->qux()); //blah blah

答案 1 :(得分:1)

我认为答案是肯定的。如果您运行以下代码,则输出将为blah blah

<code>
<?php
class foo {
  protected $norf = '';
  private $script;

  public function __construct(){
    $this->norf = 'blah blah';
  }

  public function qux(){
    $this->script = new someOtherClass();
    return $this->script->displayNorf();
  }
}

class someOtherClass extends foo {
    public function displayNorf(){
        return $this->norf;
    }
}
$test = new foo();
print($test->qux()); //blah blah
?>
</code>