PHP/MySQL | static metod
Есть класс User
И вот к примеру в другом классе мне нужно несколько раз обратиться к методу isUser()
К примеру класс Userpage и action профиль
3 раза использую статический метод User::isUser('id'). Вот тут вопрос, этот метод обратится 1 раз к базе и будет хранить результат или 3 раза??? Не брать в расчет User::isUser('online').
________
посл. ред. 07.03.2016 в 13:07; всего 1 раз(а); by gisen
<?php
/**
* @core test
*/
namespace applicationclasses;
class User {
public static function isUser($user = null) {
if(isset($_COOKIE['id']) and isset($_COOKIE['ps'])) {
$stmt = Database::run()->prepare('SELECT ' . ($user == null ? 'id' : $user) . ' FROM `db_users` WHERE `id` = :id AND `password` = :ps LIMIT 1');
$stmt->execute(array(
':id' => htmlspecialchars($_COOKIE['id']),
':ps' => htmlspecialchars($_COOKIE['ps'])
));
$fetch = $stmt->fetch();
if(!empty($fetch)) {
if($user != null) {
return $fetch[$user];
} else {
return true;
}
} else {
self::logOut();
}
} else {
return false;
}
}
}
И вот к примеру в другом классе мне нужно несколько раз обратиться к методу isUser()
К примеру класс Userpage и action профиль
<?php
/**
* @copyright Team of shit 2015
*/
namespace applicationmodules;
use applicationclassesDatabase as DB;
use applicationclassesTemplate as Tpl;
use applicationclassesUser as User;
class Userpage {
public function profile_action($user_id) {
/**
* Просто к примеру несколько методов
*/
self::infoMagic() ; // изученые магии
self::infoProf() ; // изученые профы
self::updateOnline() ;
}
public static function updateOnline() {
$update = 10 ;
if(User::isUser('online') < (time() - $update)) {
$stmt = Database::run()->prepare('UPDATE `db_users` SET `online` = :time WHERE `id` = :id LIMIT 1') ;
$stmt->execute(array(
':time' => time(),
':id' => User::isUser('id')
));
}
}
public static function infoMagic() {
$stmt = Database::run()->prepare('SELECT * FROM `magic` WHERE `user_id` = :id LIMIT 1');
$stmt->execute(array(
':user_id' => User::isUser('id')
));
$row = $stmt->rowCount();
if($row != 0) {
return $stmt->fetch() ;
}else{
return false ;
}
}
public static function infoProf() {
$stmt = Database::run()->prepare('SELECT * FROM `prof` WHERE `user_id` = :id LIMIT 1');
$stmt->execute(array(
':user_id' => User::isUser('id')
));
$row = $stmt->rowCount();
if($row != 0) {
return $stmt->fetch() ;
}else{
return false ;
}
}
}
3 раза использую статический метод User::isUser('id'). Вот тут вопрос, этот метод обратится 1 раз к базе и будет хранить результат или 3 раза??? Не брать в расчет User::isUser('online').
________
посл. ред. 07.03.2016 в 13:07; всего 1 раз(а); by gisen
3 раза
gisen (07.03.2016 в 13:14)
Gambit (07.03.2016 в 13:11)
3 раза
Почему? Я думаю что 1 раз.
Gambit (07.03.2016 в 13:11)
3 раза
Почему? Я думаю что 1 раз.
если была бы обычная функция, сколько раз она обратилась бы к бд?
Gambit, значит для того что-бы был только 1 запрос, создаём в классe User свойство static $user ; будет содержать ид юзера. И так же в классе User зарание заносим в свойство $user результат работы метода isUser() ; и в классе userpage уже обращаемся не к методу а к свойству, так будет 1 обращение к базе. Правильно думаю?
Да даже если в userpage сделать так $user = isUser('id') ; и в методах использовать уже не isUser('id') a $user. Тогда я не понимаю разницы между static и не static.