Folour, Мне вообщем всёровно но подкупило немного "писать по короче придется"
Зачем там вообще обьект нужен? Вот тут такое вот сделал:
http://pastebin.com/DmSRpP6M
Х.з работает ли, я не проверял.
Как посчитать число запросов к базе данных при генерации страницы?
Пользуюсь mysqli::query
Blade, есть же stat
KMysqli Object
(
[affected_rows] => 0
[client_info] => mysqlnd 5.0.10 - 20111026 - $Id: e707c415db32080b3752b232487a435ee0372157 $
[client_version] => 50010
[connect_errno] => 0
[connect_error] =>
[errno] => 0
[error] =>
[error_list] => Array
(
)
[field_count] => 0
[host_info] => 127.0.0.1 via TCP/IP
[info] =>
[insert_id] => 0
[server_info] => 5.5.34-log
[server_version] => 50534
[stat] => Uptime: 1262 Threads: 1 Questions: 2 Slow queries: 0 Opens: 33 Flush tables: 1 Open tables: 26 Queries per second avg: 0.001
[sqlstate] => 00000
[protocol_version] => 10
[thread_id] => 1
[warning_count] => 0
)
там общее число запросов с какого-то момента отображается? с обновлением страницы число Questions увеличвается
Blade, вроде как стартовал мускул
Жаль в pdo не храница кол. запросов
Пришлось делать так
<?php
class DB {
protected static $connection;
private static $instance = null;
private $querycount = 0;
private $querytime = 0.0;
public static function getInstance() {
if(is_null(self::$instance)) {
self::$instance = new DB;
}
return self::$instance;
}
public static function connection() {
if (is_null(static::$connection)) {
# Данные от бд
$dbcfg = [
'host' => 'localhost',
'name' => 'myblog',
'user' => 'root',
'pass' => ''
];
# Параметры подключения
$opt = [
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
];
try {
static::$connection = new PDO("mysql:host=".$dbcfg['host'].";dbname=".$dbcfg['name'], $dbcfg['user'], $dbcfg['pass'], $opt);
} catch (PDOException $e) {
throw new RuntimeException('Не удалось установить соединение с базой данных:%s'. $e->getMessage());
}
}
return static::$connection;
}
public static function prepare($sql, $values = null) {
$stime = microtime(true);
$sth = static::connection()->prepare($sql);
$sth->execute($values);
self::getInstance()->querytime += (microtime(true) - $stime);
self::getInstance()->querycount++;
return $sth;
}
public static function getQueryCount() {
return self::getInstance()->querycount;
}
public static function getQueryTime() {
return self::getInstance()->querytime;
}
public static function __callStatic($method, array $arguments ) {
return call_user_func_array([static::connection(), $method], $arguments);
}
}
?>
Мне пришлось добавить getInstance ибо через :: можно назначать только статические переменные
Можно ли както сделать такое?
class MyClass {
private $count;
public static function updateCount() {
self::$count++;
}
-------
MyClass::updateCount();
Тойсть без обекта?
class MyClass {
private static $count;
public function __construct(){
static::$count++;
}
}
-------
$a = new MyClass;
$b = new MyClass;
$c = new MyClass;
echo MyClass::$count;
Может тебе нужно это?
Если хочешь без объекта, сделай $count статичным (static) в своем коде.
Delphinum, Мне надо переменную по несколько раз изменять, а статическую можно только раз, или нет?