Php 在另一个文件中扩展类的正确方法是什么?
这就是我在foo.php中的内容Php 在另一个文件中扩展类的正确方法是什么?,php,class,require,extends,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 $
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()
我不确定问题是否在于我如何要求他们。谢谢。当然不行了。您已经创建了一个
Foo
对象,然后试图对其调用foo3
。但是Foo
没有foo3
方法。在您的示例中,您正在实例化Foo
,它是父对象,不知道该方法setFoo3()
。试试这个:
class Foo3 extends Foo
{
...
}
require_once "foo.php";
require_once "foo3.php";
$foo = new Foo3();
$foo->setFoo3("hello");
首先,在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.php中创建Foo3
类的实例化,如下所示:
我在这里没有看到任何“extend”关键字。检查:如果我在Foo3文件中不需要_once“foo.php”,它仍然可以工作。要求我扩展的文件是一种好的做法吗?我想是的。简短的回答是的。长答案,自动加载()。谢谢;)有没有具体的理由不去做“$this->foo=$foo3;”,而是去做超类方法呢?没有,如果需要的话可以。思考如何设计类,例如,一个Person
类而不是Foo
可以包含描述普通人属性的字段。在这种情况下,您可能拥有的子类(所有扩展Person
类)是,例如教师
和学生
,每个子类都包含特定于其需求的属性。
<?php
require_once "foo.php";
class Foo3 extends Foo
{
public function setFoo3($foo3) {
$this->setFoo($foo3, "some foo3 specific value"); // calling superclass method
}
}
<?php
require_once "foo3.php";
$foo3 = new Foo3();
$foo3->setFoo3("bar");