我要求PHPCassa项目中的两个班级进入我的班级。在我创建Class静态之前,我能够在selectColumnFamily中调用该方法。但现在它不起作用。有没有解决的办法?这也是最好的策略吗?我只是希望每次都不必重新连接到Cassandra DB。所以如果我使用CASSANDRA ::它只能连接一次或多次吗?
提前感谢您的帮助。
class CASSANDRA {
protected static $config = array();
protected static $keyspace = NULL;
protected static $servers = array();
public static $pool = NULL;
public function __construct()
{
require_once ('phpcassa/connection.php');
require_once ('phpcassa/columnfamily.php');
// Test the config group name
$config = Kohana::config('cassandra');
self::$servers = $config['servers'];
self::$keyspace = $config['keyspace'];
self::$pool = new ConnectionPool($this->keyspace, $this->servers);
}
public static function selectColumnFamily($column_family_name)
{
return new ColumnFamily(self::$pool, $column_family_name);
}
}
答案 0 :(得分:1)
好的,首先你使用$ this来访问静态变量,这是错误的:
self::$pool = new ConnectionPool($this->keyspace, $this->servers);
您应该使用self::
代替$this->
。
但主要的问题是:在使用类的静态方法时没有调用构造函数!(好吧,除非你之前做过new CASSANDRA()
,但这没有任何意义这样做。)
在这里,您在构造函数中设置连接,但如果您不调用它,则selectColumnFamily
将失败,因为它将尝试使用未设置的连接。
解决这个问题的一种快速方法是将__construct()
方法重命名为static init()
,并在使用该类时执行此操作:
CASSANDRA::init();
$foo = CASSANDRA::selectColumnFamily(...);
但我强烈建议你阅读一本好的教程并正确使用OOP,使用对象而不是静态类。