-1

我正在尝试在 PHPLib 中实现一个简单的 PHP db 框架(Medoo),但我坚持以下几点:

我有这个结构

index.php 启动

  • 新的medoo对象
  • 新应用对象

应用程序类处理每个应用程序的常规设置,并从我的 medoo 类扩展。

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

但它在 Foo 类中,我试图用 medoo 类连接我的数据库。medoo 类有一些可在 Foo 类中访问的受保护属性(例如 $this->medoo_property)

但是每当我尝试运行使用 medoo 类中的方法时,我都会遇到此错误:致命错误:在某物的非对象上调用成员函数某事()

当我在 medoo 类中的错误之前执行 $this 的 var_dump 时,它说它是 Foo 对象而不是 Medoo 对象。所以很明显它会抛出非对象错误,因为它试图在 Foo 对象中使用 medoo 属性。

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

非常感谢任何帮助。

4

2 回答 2

0

我认为,根据您给出的代码和描述,您面临范围界定问题。

$this如果您在类中调用,则Foo不会返回Medoo(父)类,$this在这种情况下指的是Foo. 所以你正在调用一个没有给出的函数。正如你已经说过的。

您需要的是 PHP 中的Parent函数,因此您可以从Medooin调用这些函数Foo

作为来自官方文档的简单示例:

<?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孩子应该访问和操作它们,则应该将它们设置为。

为了进一步保证对这个属性的可访问性,您需要getter 和 setter

于 2014-06-03T14:42:05.533 回答
-1

通过在 medoo 类中将其替换为 self 并将属性设为静态来修复它

于 2014-06-04T06:59:47.530 回答