Php 为什么$this不是正确的对象类型?

Php 为什么$this不是正确的对象类型?,php,oop,medoo,Php,Oop,Medoo,我正试图在PHPLib中实现一个简单的PHP db框架(Medoo),但仍停留在以下方面: 我有这个结构 初始化的index.php 新medoo对象 新的应用程序对象 application类处理每个应用程序的常规设置,并从my medoo类扩展而来 每个应用程序都有自己的类(例如Foo)和一个Foo/app.php文件。foo类从应用程序类扩展而来。 foo/app.php文件生成视图,并在该文件中创建一个foo对象 但是它在Foo类中,我正试图用medoo类连接我的数据库。 medoo

我正试图在PHPLib中实现一个简单的PHP db框架(Medoo),但仍停留在以下方面:

我有这个结构

初始化的index.php

  • 新medoo对象
  • 新的应用程序对象
application类处理每个应用程序的常规设置,并从my medoo类扩展而来

每个应用程序都有自己的类(例如Foo)和一个Foo/app.php文件。foo类从应用程序类扩展而来。 foo/app.php文件生成视图,并在该文件中创建一个foo对象

但是它在Foo类中,我正试图用medoo类连接我的数据库。 medoo类具有一些受保护的属性,这些属性可以在Foo类中访问 (例如:$this->medoo_财产)

但每当我试图运行medoo类中的方法时,我都会遇到以下错误: 致命错误:对某物中的非对象调用成员函数something()

当我在medoo类中的错误之前执行$this的var_转储时,它表示它是一个Foo对象而不是medoo对象。很明显,它抛出了一个非object错误,因为它试图在Foo对象中使用medoo属性

我在实现另一个php(PDO)类时也遇到了同样的错误,所以错误在我这边,但我不知道我做错了什么。 我希望我的问题得到正确的解释,如果需要,请随时询问更多信息


非常感谢您的帮助。

从您给出的代码和描述来看,我认为您面临范围界定问题

如果在
Foo
类中调用
$this
,则不会返回到
Medoo
(父)类,
$this
在本例中指的是
Foo
的直接实例。因此,您正在调用一个未给定的函数。正如你已经说过的

您需要的是PHP中的函数,因此可以在
Foo
中调用
Medoo
中的函数

作为官方文件中的简单示例:

<?php
class A {
    function example() {
        echo "I am A::example() and provide basic functionality.<br />\n";
    }
}

class B extends A {
    function example() {
        echo "I am B::example() and provide additional functionality.<br />\n";
        parent::example();
    }
}

$b = new B;

// This will call B::example(), which will in turn call A::example().
$b->example();
?>

另外,您不应该将所有属性都设置为
public
,这是一种不好的做法,也是一种不好的范围界定。如果此类的任何子级都不能轻松访问它们,则应将其设置为
private
;如果子级应该访问和操作它们,则应将其设置为
protected


为了进一步保证此属性的可访问性,您需要。

在medoo类中将其替换为self,并将属性设置为静态。

您可以在问题中添加一些代码吗?类和索引?@KhorneHoly application.php Foo类的实际示例Foo/app.php Index.php的实际示例如果“application”是一个“medoo”,那么它包含一个“medoo”可能没有意义——但您正在“application”中构造一个“medoo”。我认为您的对象模型可能有一些根本性的缺陷?我有应用程序的Foo扩展,它是medoo的扩展,我不能使用parent::parent::get?我知道公众是不好的做法,但我在解决这个问题时有点绝望,我尝试了很多东西:p使用单亲仍然表明$this在错误之前仍然是一个Foo对象。。我期待应用程序?我甚至在foo类中尝试了parent::get,在Application类中尝试了parent::\u construct()