не работает метод класса

152
30 декабря 2019, 18:00

я написал простой скрипт который вносит ip клиента в БД но мне захотелось переписать его в ооп стиле

include('db.php');
class ClientIp
{
  function getIp ()
  {
      $client = @$_SERVER['HTTP_CLIENT_IP'];
      $forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
      $remote = @$_SERVER['REMOTE_ADDR'] . " local";
      if (filter_var($client, FILTER_VALIDATE_IP)) $ip = $client;
      elseif (filter_var($forward, FILTER_VALIDATE_IP)) $ip = $forward;
      else $ip = $remote;
      return $ip;
    }
  }
$ip = new ClientIp;
echo $ip->getIp();
$setIp = $db->prepare("INSERT INTO guest_ip (ip) VALUES (:ip)");
$setIp->bindParam(':ip',  $ip->getIp());
$setIp->execute();

вот так это работает но я продолжил и добавил метод saveIp()

теперь это выглядит так но это не работает

include('db.php');
class ClientIp
{
  static function getIp ()
  {
      $client = @$_SERVER['HTTP_CLIENT_IP'];
      $forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
      $remote = @$_SERVER['REMOTE_ADDR'] . " local";
      if (filter_var($client, FILTER_VALIDATE_IP)) $ip = $client;
      elseif (filter_var($forward, FILTER_VALIDATE_IP)) $ip = $forward;
      else $ip = $remote;
      return $ip;
    }
    function saveIp () {
        $setIp = $db->prepare("INSERT INTO guest_ip (ip) VALUES (:ip)");
        $setIp->bindParam(':ip',  ClientIp::getIp());
        $setIp->execute();
    }
  }
$ip = new ClientIp;
echo $ip->getIp();
$ip->saveIp();

что не так ?

Answer 1

Попробуйте так:

include('db.php');
class ClientIp
{
    public function getIp ()
    {
        $client = @$_SERVER['HTTP_CLIENT_IP'];
        $forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
        $remote = @$_SERVER['REMOTE_ADDR'] . " local";
        if (filter_var($client, FILTER_VALIDATE_IP)) $ip = $client;
        elseif (filter_var($forward, FILTER_VALIDATE_IP)) $ip = $forward;
        else $ip = $remote;
        return $ip;
    }
    public function saveIp(&$database) {
        $setIp = $databse->prepare("INSERT INTO guest_ip (ip) VALUES (:ip)");
        $setIp->bindParam(':ip', $this->getIp());
        $setIp->execute();
    }
}
$ip = new ClientIp;
echo $ip->getIp();
$ip->saveIp($db);
Answer 2

Ошибка тут:

$ip = new ClientIp;
echo $ip->getIp();

у вас функция:

static function getIp () 

Объявлена как static, убрать нужно. А вообще, хорошо бы ошибки показать, а то так сложно.

READ ALSO
Отключение эмуляции запросов php 7.2

Отключение эмуляции запросов php 7.2

при выставлении атрибуту PDO::ATTR_EMULATE_PREPARES значения FALSE, возникает ошибка:

174
Запутался в многомерных массивах, хэлп))

Запутался в многомерных массивах, хэлп))

Проблема такая, есть многомерный массив, с двумя ключами AUTHORS и BOOKS, в этих ключах еще вложены массивы, ключами для авторов являются их емэйлы...

134
Связь в таблице

Связь в таблице

У меня есть две таблицы в БДМне нужно во второй таблице в поле routes_route_id сослаться на поле route_id в первой таблице, но я не могу указать связь...

161
Отправка данных по ajax на контроллер php

Отправка данных по ajax на контроллер php

Делаю тестовое заданиеНеобходимо реализовать гостевую книгу на MVC

168