7

私はOOPを学んでおり、クラスを互いに使用するのに非常に混乱しています。

私は合計3つのクラスを持っています

//CMS System class
class cont_output extends cont_stacks
{
    //all methods to render the output
}


//CMS System class
class process
{
    //all process with system and db
}


// My own class to extends the system like plugin
class template_functions
{
    //here I am using all template functions
    //where some of used db query
}

ここで、両方のシステム クラスで独自のクラス template_functions を使用したいと考えています。しかし、使い方が非常にわかりずらい。これを理解するのを手伝ってください。

編集:申し訳ありませんが、別の PHP ファイルで自分のクラスについて言及するのを忘れていました。

4

2 に答える 2

14

includeまず、クラスファイルを使用する前に、次のことを確認してください。

include_once 'path/to/tpl_functions.php';

これは、index.php または を使用するクラスの上で行う必要がありますtpl_functionautoloadingクラスの可能性にも注意してください。

PHP5以降、クラスを自動ロードする可能性があります。これは、コード ファイルがまだインクルードされていないクラスを使用しようとするたびに呼び出されるフック関数を登録することを意味します。include_onceこれを行うと、すべてのクラス ファイルにステートメントを含める必要がなくなります。次に例を示します。

index.phpまたは任意のアプリケーション エントリ ポイント:

spl_autoload_register('autoloader');

function autoloader($classname) {
    include_once 'path/to/class.files/' . $classname . '.php';
}

これからは、コード ファイルを含めることを心配することなく、クラスにアクセスできます。それを試してみてください:

$process = new process();

template_functionsこれを知っていれば、クラスを使用する方法がいくつかあります


それを使用してください:

クラスのインスタンスを作成すると、コードのどの部分でもクラスにアクセスできます。

class process
{
    //all process with system and db

    public function doSomethging() {
        // create instance and use it
        $tplFunctions = new template_functions();
        $tplFunctions->doSomethingElse();
    }
}

インスタンス メンバー:

プロセスクラスを例にとってみましょう。クラス内で template_functions を使用できるようにするにはprocess、インスタンス メンバーを作成し、それを必要な場所で初期化します。コンストラクターが適しているようです。

//CMS System class
class process
{
    //all process with system and db

    // declare instance var
    protected tplFunctions;

    public function __construct() {
        $this->tplFunctions = new template_functions;
    }

    // use the member : 

    public function doSomething() {
        $this->tplFunctions->doSomething();
    }


    public function doSomethingElse() {
        $this->tplFunctions->doSomethingElse();
    }
}
于 2013-04-23T16:59:29.220 に答える
0

クラスを拡張すると、template_functionsすべての機能を使用できます。

class cont_output extends cont_stacks //cont_stacks has to extend template_functions
{
    public function test() {
        $this->render();
    }
}


class process extends template_functions
{ 
    public function test() {
        $this->render();
    }
}


class template_functions
{
    public function render() {
        echo "Works!";
    }
}
于 2013-04-23T17:01:35.413 に答える