在另一个文件中扩展类的正确方法是什么?

时间:2011-11-11 01:58:56

标签: php class require extends

这就是我在foo.php中所拥有的

class Foo
{
    public $foo = NULL;
    public $foo2 = NULL;

    public function setFoo ($foo, $foo2)
    {
       $this->foo = $foo;
       $this->foo2 = $foo2'
    }
}

这就是我在foo3.php中所拥有的

class Foo3 extends Foo
{
    public $foo3 = NULL;

    public function setFoo3 ($foo3)
    {
       $this->foo = $foo3;
    }
}  

这就是我在第三个文件run.php中的要求:

require_once "foo.php";
require_once "foo3.php";
$foo = new Foo();
$foo->setFoo3("hello");

我收到此错误:

致命错误:调用未定义的方法Foo :: setFoo3()

我不确定问题是我是如何要求他们的。感谢。

3 个答案:

答案 0 :(得分:10)

在您的示例中,您正在实例化Foo,它是父项,并且不知道方法setFoo3()。试试这个:

class Foo3 extends Foo
{
    ...
}

require_once "foo.php";
require_once "foo3.php";
$foo = new Foo3();
$foo->setFoo3("hello");

答案 1 :(得分:9)

首先,在您的 foo.php 中不应标记您的字段public,因为您在setFoo($foo1, $foo2)方法中设置了这些值。相反,你可能有类似的东西:

<?php

class Foo
{
    private $foo1;
    private $foo2;

    public function setFoo($foo1, $foo2) {
        $this->foo1 = $foo1;
        $this->foo2 = $foo2;
    }
 }

然后,在声明类extends时应添加Foo3关键字,另外还需要在文件开头包含扩展类文件。在您的情况下,您的 foo3.php 文件中可能包含以下内容:

<?php

require_once "foo.php";

class Foo3 extends Foo
{
    public function setFoo3($foo3) {
        $this->setFoo($foo3, "some foo3 specific value"); // calling superclass method
    }
}

然后您可以在 run.php 中创建Foo3类的实例化,如下所示:

<?php

require_once "foo3.php";

$foo3 = new Foo3();
$foo3->setFoo3("bar");

和我的建议,你应该阅读一些关于OOP技术的内容;)

答案 2 :(得分:1)

当然这不起作用。您已创建Foo对象,然后尝试在其上调用foo3。但Foo没有foo3方法。