PHP написать на ноль? - PullRequest
       1

PHP написать на ноль?

0 голосов
/ 28 ноября 2011

Мой домашний простой регистратор (просто обертка вокруг fopen, fwrite, fclose) должен быть включен или отключен на лету.Я думаю, что способ, которым я проверяю, включена ли регистрация, является overkill (каждый вызов метода регистрации требует оценки LOGGING):

config.inc.php

define('LOGGING', true);

logger.php

public function __construct($filename)
{
    $this->fp = fopen($filename, 'w+');
}

public function __destruct()
{
    fclose($this->fp);
}

public function warn($message)
{
   $this->log('WARN', $message);
}

private function log($type, $message)
{
   if(!defined(LOGGING) || !LOGGING) return;

   fwrite($this->fp, "[$type] $message\n");
}

Вопрос: как инициализировать обработчик файла, например, null и удалитьчек на LOGGING?Я имею в виду что-то вроде этого:

public function __construct($filename)
{
   // Create a fake stream if logging is disabled
   $this->fp = !defined(LOGGING) || !LOGGING ? null : fopen($filename, 'w+);
}

Будущий вызов $logger->warn('Ops..') ничего не должен делать, не вызывая ошибок или уведомлений.

Ответы [ 3 ]

1 голос
/ 28 ноября 2011

Я упомянул это как комментарий выше. Тем не менее, теперь еще раз в качестве ответа, потому что теперь я думаю, что это один.

Вы можете создать специальный подкласс логгера, что-то вроде

class NullLogger implements Logger {
  public function log ($message) { /* No operation */ }
}

Когда LOGGING равно false, просто используйте этот класс журналов и каждый вызов, ничего не делая, что снизит накладные расходы до абсолютного минимума.

У этого подхода есть даже собственное имя / шаблон: http://en.wikipedia.org/wiki/Null_Object_pattern

0 голосов
/ 28 ноября 2011

Затраты на файловые операции значительно превышают затраты на выполнение if (LOGGING) { ... }. Вы оптимизируете совершенно не то, что нужно. Проверка истинности LOGGING - это простое сравнение с одним значением. Для сравнения, файловая операция, даже если вы пишете в / dev / null, требует запуска операций файловой системы, буферов ОС, проверки разрешений, бла-бла-бла.

Я не знаю о вас, но я сделаю операцию, которая стоит 0,01 доллара США, по сравнению с операцией, которая имеет тот же эффект, но каждый раз стоит 100 долларов.

0 голосов
/ 28 ноября 2011

Вы можете расширить этот класс и переопределить метод log (например, оставить пустое тело).Затем, если ведение журнала отключено, создайте объект дочернего класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...