这就是我在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()
我不确定问题是我是如何要求他们的。感谢。
答案 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
方法。