Нестрогий несколько интерфейсов вводят ограничения параметра?

Это не очень уникально, как поставлено. В конфигурации по умолчанию это - результат хеша различных вещей включая результат gettimeofday (который не ужасно уникален), но если Вы волнуетесь, необходимо настроить его для рисования некоторой энтропии из/dev/urandom, как так

ini_set("session.entropy_file", "/dev/urandom");
ini_set("session.entropy_length", "512");

поиск "php_session_create_id" в код для фактического алгоритма, который они используют.

Отредактированный для добавления: существует генератор случайных чисел DFA, отобранный изодромным с предварением, смешанным со временем в мкс. Это не твердое условие уникальности особенно с точки зрения безопасности . Используйте энтропийную конфигурацию выше.

Обновление:

С PHP 5.4.0 значения по умолчанию сессии entropy_file к/dev/urandom или/dev/arandom, если это доступно. В PHP 5.3.0 этих директивы оставляют пустыми по умолчанию. Руководство

PHP

6
задан Steve Guidi 12 December 2009 в 00:20
поделиться

4 ответа

Добавление нескольких ограничений, как во втором примере, действительно аддитивно. На странице MSDN об общих ограничениях немного об этом.

Можете ли вы сделать так, чтобы ваши два интерфейса унаследовали от базового интерфейса и ограничили методы базовым типом?

8
ответ дан 10 December 2019 в 00:39
поделиться

Возможно, это не ответ на ваш вопрос, но у меня спонтанно возникает ощущение, что вы можете захотеть реорганизовать свои интерфейсы. Из вашего вопроса:

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

Я считаю, что интерфейсы являются контрактами . Они определяют, как что-то должно выглядеть , а не совсем то, как оно должно вести себя ; это задача реализации. Сейчас у меня нет информации о вашем приложении или проблемной области, но я, вероятно, попытался бы потратить некоторое время на идентификацию идентичных частей этих интерфейсов и переместить их в один интерфейс, а различия сохранить только как отдельные интерфейсы. Таким образом, вам, возможно, будет легче преодолевать подобные проблемы.

2
ответ дан 10 December 2019 в 00:39
поделиться

Некоторые из проверок времени компиляции теряются, но я не вижу другого выхода ... Вам нужно выбрать, что вы бы предпочли использовать (я предполагаю, что ваши предпочтения будет в сети):

public void DoStuff<T>(string foo)
{
    Type type = typeof(T);
    if(type.GetInterfaces().Contains(typeof(IOnline)))
         doStuffOnline<T>(foo);
    else if(type.GetInterfaces().Contains(typeof(IOffline)))
         doStuffOffline<T>(foo);
    else
         throw new Exception("T must implement either IOnline or IOffline");
}

private void doStuffOnline<T>(string foo){ // can assume T : IOnline }
private void doStuffOffline<T>(string foo){ // can assume T : IOffline }
0
ответ дан 10 December 2019 в 00:39
поделиться

Я думаю, что стандартный способ в .NET сделать это - иметь один интерфейс, содержащий как ваши функции IOnline, так и IOffline, а затем некоторые свойства, которые говорят, какие функции фактически реализованы в конкретном классе. . Вы видите этот шаблон в различных местах .NET с такими вещами, как метод Seek (), который может или не может быть реализован, и свойство CanSeek, которое вы можете протестировать.

Это, возможно, не самый чистый объектно-ориентированный дизайн, но он работает.

0
ответ дан 10 December 2019 в 00:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: