0

Kohana MVC フレームワークを使用しています。PHPCassa オブジェクト (Cassandra NoSQL) で動作するモジュールを追加したいと考えています。

問題は、オブジェクトを作成すると、そのすべてのプロパティがあり、コンストラクトで操作できますが、別の場所から作成すると、空のオブジェクトとして返されることです。

私はOOPに比較的慣れていないので、何かが足りないと確信しています。ここで私を助けてください。

モジュールファイル

<?php

// Loading cassandra libraries, tried to load them here, did not help
//require 'application/modules/cassandra/lib/connection.php';
//require 'application/modules/cassandra/lib/columnfamily.php';

class Cassandra {

    function __construct($columnFamily) {
        // Loading cassandra libraries
        require 'application/modules/cassandra/lib/connection.php';
        require 'application/modules/cassandra/lib/columnfamily.php';

        $pool = new ConnectionPool('localhost');
        $cf = new ColumnFamily($pool, $columnFamily);

        // print_r($cf); // This will print object with all the proporties that I can use

        return $cf;
    }

モジュールをロードして空のオブジェクトを作成するクラス

<?php

class Controller_Main extends Controller {

    public function action_index() {
        $a = new Cassandra('timeline');
        echo '<pre>';
        print_r($a); // This will print out empty Cassandra object
        die();

        //$this->response->body('hello, world!');
    }

}
4

2 に答える 2

1

ConnectionPoolColumnFamilyはコンストラクターでのみ使用されているため、コンストラクターが完了すると存在しなくなります。また、PHP コンストラクターは、試した方法ではなく、newを使用して呼び出されたときに新しいインスタンスを返します。returnたぶん、次のようなことを試してください:

<?php

require_once 'application/modules/cassandra/lib/connection.php';
require_once 'application/modules/cassandra/lib/columnfamily.php';

class Cassandra {

    public $pool = null;
    public $cf = null;

    function __construct($columnFamily) {

        $this->pool = new ConnectionPool('localhost');
        $this->cf = new ColumnFamily($this->pool, $columnFamily);

        return $this;

    }
}

それを実行してから、$var_dump() aでCassandra オブジェクト全体を表示するか、$a->cfで ColumnFamily オブジェクトを表示してみてください。必要なものを表示する必要があります。

于 2012-04-09T12:40:54.583 に答える
0

間違った方法で行うと、コンストラクターで2つのオブジェクトを作成します。1つは Cassandraオブジェクトで、もう 1つはオブジェクトColumnFamilynew Cassandra('timeline');返しCassandraます。

この方法を試してください:

class Cassandra {

    static function LoadCassandra($columnFamily) {
        // Loading cassandra libraries
        require 'application/modules/cassandra/lib/connection.php';
        require 'application/modules/cassandra/lib/columnfamily.php';

        $pool = new ConnectionPool('localhost');
        $cf = new ColumnFamily($pool, $columnFamily);

        return $cf;
    }

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

class Controller_Main extends Controller {

    public function action_index() {
        $a =  Cassandra::LoadCassandra('timeline');
        echo '<pre>';
        print_r($a); // This will print out empty Cassandra object
        die();

        //$this->response->body('hello, world!');
    }

}
于 2012-04-09T12:46:49.310 に答える