-1

シンプルな PHP db フレームワーク (Medoo) を PHPLib に実装しようとしていますが、次の点に固執しています。

私はこの構造を持っています

開始するindex.php

  • 新しい medoo オブジェクト
  • 新しいアプリケーション オブジェクト

アプリケーション クラスは各アプリの一般的な設定を処理し、私の medoo クラスから拡張します。

各アプリには独自のクラス (例: Foo) と foo/app.php ファイルがあります。foo クラスはアプリケーション クラスから拡張されます。foo/app.php ファイルがビューを生成し、このファイルに foo オブジェクトが作成されます。

しかし、それは Foo クラスにあり、medoo クラスを使用してデータベースに接続しようとしています。medoo クラスには、Foo クラス内でアクセス可能な保護されたプロパティがいくつかあります (例: $this->medoo_property)。

しかし、私が実行しようとしているときはいつでも、medoo クラスのメソッドを使用して、このエラーで立ち往生しています: Fatal error: Call to a member function something() on a non-object in something

medoo クラスでエラーが発生する直前に $this の var_dump を実行すると、Medoo オブジェクトではなく Foo オブジェクトであると表示されます。したがって、Foo オブジェクトで medoo プロパティを使用しようとするため、非オブジェクトのエラーがスローされることは明らかです。

別のphp(PDO)クラスを実装しても同じエラーが発生するため、エラーは私の側にありますが、何が間違っているのかわかりません。私の問題が適切に説明されていることを願っています。必要に応じて、さらに情報を求めてください。

どんな助けでも大歓迎です。

4

2 に答える 2

0

与えられたコードと説明から、スコープの問題に直面していると思います。

クラスでの呼び出し$thisの場合、 (親) クラスにFoo戻らず、この場合は の直接インスタンスを参照します。したがって、指定されていない関数を呼び出しています。あなたがすでに言ったように。Medoo$thisFoo

必要なのは PHP のParentMedoo関数なので、 inから関数を呼び出すことができます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あります。

このプロパティへのアクセス可能性をさらに保証するには、ゲッターとセッターが必要です。

于 2014-06-03T14:42:05.533 に答える
-1

medooクラスでこれをselfに置き換え、プロパティを静的にすることで修正しました

于 2014-06-04T06:59:47.530 に答える