Если вы собираетесь использовать глобальные переменные (вместо передачи соединения через конструктор), вы должны убедиться, что он глобален, в тех местах, где вы планируете его использовать.
Global $cb_db;
$cb_db = new cb_db(USER, PASSWORD, NAME, HOST);
class cb_user {
protected function find_by_sql( $sql ) {
global $cb_db;
//$cb_db = new cb_db(USER, PASSWORD, NAME, HOST);
$result_set = $cb_db->query( $sql );
$object_array = array();
while( $row = $cb_db->fetch_array( $result_set ) ) {
$object_array[] = self::instantiate( $row );
}
return $object_array;
}
}
Однако я полагаю, что лучший способ сделать это - передать соединение с базой данных через конструктор.
$cb_db = new cb_db(USER, PASSWORD, NAME, HOST);
$cb_user = new cb_user($cb_db);
class cb_user {
public __construct(cb_db $database)
{
$this->database = $database
}
protected function find_by_sql( $sql ) {
$this->database = new cb_db(USER, PASSWORD, NAME, HOST);
$result_set = $cb_db->query( $sql );
$object_array = array();
while( $row = $cb_db->fetch_array( $result_set ) ) {
$object_array[] = self::instantiate( $row );
}
return $object_array;
}
}
Вы также можете передать ее отдельной функции (find_by_sql($sql, $cb_db)
), если обнаружите, что это единственная функция, которая использует соединение.