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

die*_*sel 8 php extends class require

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

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

    public function setFoo ($foo, $foo2)
    {
       $this->foo = $foo;
       $this->foo2 = $foo2'
    }
}
Run Code Online (Sandbox Code Playgroud)

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

class Foo3 extends Foo
{
    public $foo3 = NULL;

    public function setFoo3 ($foo3)
    {
       $this->foo = $foo3;
    }
}  
Run Code Online (Sandbox Code Playgroud)

这是我在第三个文件run.php中需要的方法:

require_once "foo.php";
require_once "foo3.php";
$foo = new Foo();
$foo->setFoo3("hello");
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

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

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

Mik*_*ell 10

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

class Foo3 extends Foo
{
    ...
}

require_once "foo.php";
require_once "foo3.php";
$foo = new Foo3();
$foo->setFoo3("hello");
Run Code Online (Sandbox Code Playgroud)


Dan*_*.K. 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;
    }
 }
Run Code Online (Sandbox Code Playgroud)

然后你应该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 Code Online (Sandbox Code Playgroud)

那么你可以Foo3run.php中创建一个类的实例化,如下所示:

<?php

require_once "foo3.php";

$foo3 = new Foo3();
$foo3->setFoo3("bar");
Run Code Online (Sandbox Code Playgroud)

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