Я раньше не делал ни одного класса Singleton, и теперь я понял, что для этого подключения к базе данных будет хорошей идеей сделать это, но я не знаю, почему он не работает. Я действительно был бы признателен, если бы кто-то помог мне с этим, так как я хочу узнать, как работает ООП.
В любом случае, я исправил его, просто обновив свой PHP до последней версии, теперь $DBH = new static();
отлично работает, спасибо людям.
Я попытался использовать $DBH = new static();
isntead $DBH = new self();
, но тогда у меня есть эта ошибка:
Ошибка анализа: синтаксическая ошибка, неожиданный T_STATIC, ожидая T_STRING или T_VARIABLE или '$' в mSingleton.php on строка 14
Ошибка:
Неустранимая ошибка: невозможно создать экземпляр абстрактный класс Singleton в mSingleton.php в строке 14
Файлы: (MSingleton.php)
abstract class Singleton
{
protected $DBH;
public static function getInstance()
{
if ($DBH == null)
{
$DBH = new self();
}
return $DBH;
}
}
(mDBAccess.php)
<?php
//mDBAccess.php
//Removed values ofc
$db_host = "";
$db_name = "";
$db_user = "";
$db_pass = "";
include "mSingleton.php";
class DBAccess extends Singleton
{
protected $DBH;
function __construct()
{
try
{
$this->DBH = new PDO("mysql:host=$db_host;dbname=$db_name", $db_user, $db_pass);
$this->DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
}
catch (PDOException $e)
{
echo $e->getMessage();
}
}
public static function getDBH()
{
return self::getInstance()->DBH;
}
}
(mLog.php)
<?php
//mLog.php
include "mDBAccess.php";
class Log
{
public static function Add($action)
{
try
{
$DBH = DBAccess::getDBH();
//Getting user IP
$ip = $_SERVER['REMOTE_ADDR'];
//Getting time
$time = date('Y-m-d');
//Preparing our SQL Query
$values = array($ip, $action, $time);
$STH = $DBH->prepare("INSERT INTO log (ip, action, time)
VALUES (?, ?, ?)");
//Excecuting SQL Query
$STH->execute($values);
}
catch (PDOException $e)
{
echo $e->getMessage();
}
}
}
//testing..
Log::Add("ddd");