Изучаю работу функций, решил сделать некое API для своего движка. Вот так выглядит сама функция:
class le {
public function query($sql, $params)
{
$query = $db->prepare($sql);
$query->execute($params);
return $query;
}
}
Теперь пытаюсь вызвать функцию в классе:
$engine = new le;
$banned = $engine->query("SELECT * FROM `bans` WHERE ip = ?", array(
$_SERVER['REMOTE_ADDR']
))->fetch(PDO::FETCH_ASSOC);
И тут функции query нужно значение $db, которое должно быть таким:
$db = new PDO('mysql:host='.$set['db']['host'].';dbname='.$set['db']['name'].';charset=utf8',$set['db']['user'],$set['db']['pass']);
Мне интересно, можно ли как-то при вызове функции new le; хранить переменную в самом классе? Примерно как-то так:
class le {
$db = new PDO('mysql:host='.$set['db']['host'].';dbname='.$set['db']['name'].';charset=utf8',$set['db']['user'],$set['db']['pass']);
public function query($sql, $params)
{
global $db;
$query = $db->prepare($sql);
$query->execute($params);
return $query;
}
}
Однако данный код вызывает ошибку по типу:
Parse error: syntax error, unexpected '$set' (T_VARIABLE), expecting function (T_FUNCTION) in C:\servers\WWW\engine\engine.php on line 4
Можете показать, как надо записывать такие переменные в классы?
UPD. Как я понял надо писать что-то типо того:
class le {
function __construct() {
$set = json_decode(file_get_contents('engine/settings.json'), true);
$lang = json_decode(file_get_contents('engine/languages/'.$set['ui']['language'].'.json'), true);
$tpl = unserialize(file_get_contents('engine/templates/'.$set['ui']['template'].'.serialize'));
$db = new PDO('mysql:host='.$set['db']['host'].';dbname='.$set['db']['name'].';charset=utf8',$set['db']['user'],$set['db']['pass']);
}
public function query($sql, $params)
{
$query = $this->$db->prepare($sql);
$query->execute($params);
return $query;
}
....
Fatal error: Uncaught Error: Cannot access empty property in C:\servers\WWW\engine\engine.php:13 Stack trace: #0 C:\servers\WWW\index.php(5): le->query('SELECT * FROM `...', Array) #1 {main} thrown in C:\servers\WWW\engine\engine.php on line 13
Разобрался сам, спасибо за подсказки по поводу $this.
<?php
class le {
public function __construct()
{
$this->set = json_decode(file_get_contents('engine/settings.json'), true);
$this->lang = json_decode(file_get_contents('engine/languages/'.$this->set['ui']['language'].'.json'), true);
$this->tpl = unserialize(file_get_contents('engine/templates/'.$this->set['ui']['template'].'.serialize'));
$this->db = new PDO('mysql:host='.$this->set['db']['host'].';dbname='.$this->set['db']['name'].';charset=utf8',$this->set['db']['user'],$this->set['db']['pass']);
}
public function query($sql, $params)
{
$query = $this->db->prepare($sql);
$query->execute($params);
return $query;
}
public function ndate($a)
{
date_default_timezone_set('Europe/Moscow');
$ndate = date('d.m.Y', $a);
$ndate_time = date('H:i', $a);
$ndate_exp = explode('.', $ndate);
$nmonth = array(
1 => 'янв',
2 => 'фев',
3 => 'мар',
4 => 'апр',
5 => 'мая',
6 => 'июн',
7 => 'июл',
8 => 'авг',
9 => 'сен',
10 => 'окт',
11 => 'ноя',
12 => 'дек'
);
foreach($nmonth as $key => $value)
if ($key == intval($ndate_exp[1])) $nmonth_name = $value;
if ($ndate == date('d.m.Y')) return 'сегодня в ' . $ndate_time;
elseif ($ndate == date('d.m.Y', strtotime('-1 day'))) return 'вчера в ' . $ndate_time;
else return $ndate_exp[0] . ' ' . $nmonth_name . ' ' . $ndate_exp[2] . ' в ' . $ndate_time;
}
public function views($value)
{
if ($value >= 1000) return round($value / 1000, 1).'K';
else return $value;
}
public function json($url)
{
$cURL = curl_init();
curl_setopt($cURL, CURLOPT_URL, $url);
curl_setopt($cURL, CURLOPT_HTTPGET, true);
curl_setopt($cURL, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Accept: application/json'
));
curl_setopt($cURL, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($cURL);
curl_close($cURL);
return json_decode($result, true);
}
public function cache($function, $content) {
if (is_null($content)) {
$cache = $this->query('SELECT expires FROM cache WHERE function = ?',array($function))->fetch(PDO::FETCH_ASSOC)['expires'];
if (is_null($cache)) {
$this->query('INSERT INTO `cache`(`function`, `expires`) VALUES (?,?)',array($function, time() - $set['int']['cache_time']));
return time() - $set['int']['cache_time'];
}
else return $cache;
}
else if (!is_null($content)) {
file_put_contents('engine/cache/'.$function.'.html', $content);
$this->query('UPDATE `cache` SET `expires`= ? WHERE function = ?',array(time() + $set['int']['cache_time'], $function));
}
}
}
?>
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Как подключить интерпретатор? Скачал PHP для NetbeansНе могу понять, что выбрать при его подключении
Как присвоить числовое имя к 7 дням недели например 7 = 1, следующие 7 дней = 2 как пронумеровать недели в году?
Для оптимизации изображений использую PHP расширение Imagick, Imagick::setImageCompression устанавливает сжатие на изображение, в качестве параметра принимает...