Loading...
PHP/MySQL | static metod
Есть класс User

<?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 раза
Gambit (07.03.2016 в 13:11)
3 раза

Почему? Я думаю что 1 раз.
gisen (07.03.2016 в 13:14)
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.
Онлайн: 8
Время:
Gen. 0.0834
(c) Bym.Guru 2010-2025