Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как заменить function на классы в php?

Давид Мейстер Мастер (2063), закрыт 8 месяцев назад
К примеру у меня есть такие функции
  
function get_id()
{
include __DIR__ . '/database/db.php';
$id = $db->query("SELECT `id` FROM `users` WHERE `access_token` = '$_COOKIE[access_token]'")->fetch_assoc() ?? false;
return $id;
}

function get_demo_status($id)
{
include __DIR__ . '/database/db.php';
$demo_status = $db->query("SELECT `status` FROM `demo` WHERE `user_id` = '$id'")->fetch_assoc()['status'] ?? false;
if ($demo_status) {
}
return $demo_status;
}

function get_balance($id, $demo_status)
{
include __DIR__ . '/database/db.php';

if ($demo_status) {
$balance = $db->query("SELECT `balance` FROM `demo` WHERE `user_id` = '$id'")->fetch_assoc()['balance'] ?? false;
} else {
$balance = $db->query("SELECT `balance` FROM `users` WHERE `id` = '$id'")->fetch_assoc()['balance'] ?? false;
}

if ($balance) {
$balance = round($balance, 2);
}
return $balance;
}
Я их вызываю так
 include __DIR__ . '/data.php'; 
$id = get_id();
Насколько мне известно, лучше использовать классы, так вот как мне к примеру получить $id с помощью класса
Лучший ответ
Андрей Высший разум (425879) 10 месяцев назад
 class Data {
public static function get_id() {
include __DIR__ . '/database/db.php';

return $db->query(
"SELECT `id` FROM `users` WHERE `access_token` = '$_COOKIE[access_token]'"
)->fetch_column();
}

public static function get_demo_status($id) {
include __DIR__ . '/database/db.php';

return $db->query(
"SELECT `status` FROM `demo` WHERE `user_id` = '$id'"
)->fetch_column();
}

public static function get_balance($id, $demo_status) {
include __DIR__ . '/database/db.php';

if ($demo_status) {
$sql = "SELECT `balance` FROM `demo` WHERE `user_id` = '$id'";
} else {
$sql = "SELECT `balance` FROM `users` WHERE `id` = '$id'";
}
$balance = $db->query($sql)->fetch_column();
return $balance !== false ? round($balance, 2): $balance;
}
}
 include __DIR__ . '/data.php';  
$id = Data::get_id();
Это если минимально менять твой код.
Давид МейстерМастер (2063) 10 месяцев назад
Я хочу сделать максимально структурированный код, что будет если максимально структурировано поменять код. Нейронка дала вот такой вариант.

p.s. Для того чтобы скинуть код текстом символов не хватило, вот
 class User 
{
private $db;

function __construct()
{
include __DIR__ . '/database/db.php';
$this->db = $db;
}

function get_id()
{
$id = $this->db->query("SELECT id FROM users WHERE access_token = '$_COOKIE[access_token]'")->fetch_assoc() ?? false;
return $id;
}

function get_demo_status($id)
{
$demo_status = $this->db->query("SELECT status FROM demo WHERE user_id = '$id'")->fetch_assoc()['status'] ?? false;
return $demo_status;
}
}
Андрей Высший разум (425879) Давид Мейстер, В этом случае придётся создавать объект класса User - перед использованием методов. В целом же, если переделывать серьёзно, то начинать надо c изучения PSR-0 и PSR-4 (они есть в русском переводе).
Остальные ответы
Похожие вопросы