-1

将来、PHP を使用してアプリケーションを構築するためのプライベート フレームワークを開発したいと考えています。私のサンプルコードは次のとおりです。

class system {
    const token = "1234";
}

class data extends system {
    public $driver = "mysql";

    function get_name() {
        if (parent::token == "1234") {
            return "John";
        }
    }
}

class about extends system {
    public $version = "10.1";
    function get_build() {
        if (parent::token == "1234") {
            return "920";
        }
    }
}

私の質問は、クラス構造を含めて子関数を呼び出すことができるかどうかです。これの正確な名前はわかりません。みたいなことを思います。

$system = new system();

echo $system->data->driver; // Output "mysql"
echo $system->data->get_name(); // Output "John"
echo $system->about->version; // Output "10.1"

LUA では、コードは次のようになります。

system = {};

system.token = "1234";
system.data.driver = "mysql";

function system.data.get_name()
    if (system.token == "1234") then
        return "John";
    end
end

system.about.version = "10.1";

function system.about.get_build()
    if (system.token == "1234") then
        return "920";
    end
end

使用法:

name = system.data.get_name() -- variable "name" value will be "John"

ありがとう。

編集:

そのコードは、PHP で作業を開始したばかりなので、私が達成したいことを示すためのサンプルにすぎません。通常、私はLUAを使用しています。私の計画は、使いやすく、理解しやすいフレームワークを構築することです。そのため、人々はアプリケーションを簡単に作成できるようになり、関数リファレンスを簡単に覚えることができます。例えば:

$tbl_result = $system->data->select("name", "table", "id='10'");

このコードは、クエリを実行せずにデータベースからデータを簡単に選択するために使用されます。戻り値は配列リストです。また、この機能は、構成からデータベース ドライバを自動的に検出します。したがって、ユーザーは特定のドライバーで SQL クエリを知る必要はありません。ただし、関数を呼び出すメソッドは構造化する必要があります。system->data->function を使用する必要があるのはなぜですか? システム、コンポーネント、およびモジュールをルートとして持つためです。次に、すべてのルートに多くの子があります。たとえば、システムにはコア、データ、モデルなどがあります。おそらく、各ルートには同じ子の名前があります。これが、私がこの構造を構築しなければならない理由です。

4

2 に答える 2

1

データクラスとaboutクラスがシステムクラスから拡張されるべき理由はわかりません。代わりに次のことを行うことができます。

class data {
    public $driver = 'mysql';
    public $token;
    function __construct($token)
    {
        $this->token = $token;
    }
    function get_name() {
        if ($this->token == "1234") {
            return "John";
        }
    }
}

class about {
    public $version = "10.1";
    public $token;
    function __construct($token)
    {
        $this->token = $token;
    }
    function get_build() {
        if ($this->token == "1234") {
            return "920";
        }
    }
}

class system {
    public $token;
    public $about;
    public $data;

    function __construct($token)
    {
        $this->token = $token;
        $this->about = new about($this->token);
        $this->data = new data($this->token);
    }   
}

次に、このようなことを行うことができます。

$system = new system('1234');
echo $system->data->driver; // Output "mysql"
echo $system->data->get_name(); // Output "John"
echo $system->about->version; // Output "10.1"

これがあなたが達成したいことをする一つの方法であることを示しているだけです。ただし、フレームワークを使用する前に、フレームワークの設計と構造について再考します。

于 2013-03-13T02:01:07.100 に答える
0

これは、PHPでのOOPの動作とは異なり、一般的なOOPの目的でもありません。

子クラスのすべての子関数にアクセスする場合は、aboutオブジェクトをインスタンス化するシステムオブジェクトをインスタンス化する必要はありません。

$system = new about();
echo $system->driver; // Output "mysql"
echo $system->get_name(); // Output "John"
echo $system->version; // Output "10.1"

ただし、PHPOOPについては少し読んでみます。

于 2013-03-13T01:44:15.073 に答える