Обычно статические методы, свойства и классы распространены в Application
уровень. Пока жизни приложения, они совместно используются.
можно определить различное поведение при помощи эти ThreadStatic
атрибут. В этом случае они будут характерны для текущего потока, который, я думаю, специфичен для каждого запроса.
я не советовал бы этому хотя, поскольку это кажется сверхсложным.
можно использовать HttpContext.Current.Items
для установки материала для одного запроса, или HttpContext.Current.Session
для установки материала для одного пользователя (через запросы).
В целом, хотя, если Вы не должны использовать вещи как Server.Transfer
, лучший способ в основном создает вещи однажды и затем передает их явно через вызов метода.
Я провел очень быстрый тест:
$a = array(
'id' => 152,
'another' => 'test',
'ananother' => 456,
);
$json = json_encode($a);
echo $json;
Кажется, это похоже на то, что вы описываете, если я не ошибаюсь?
И я получаю в результате:
{"id":152,"another":"test","ananother":456}
Итак, в этом случае целые числа не были преобразованы в строку.
Тем не менее, это может зависеть от версии PHP, которую мы используем: было исправлено несколько ошибок, связанных с json_encode, в зависимости от версии of PHP ...
Этот тест был выполнен с PHP 5.2.6; Я получаю то же самое с PHP 5.2.9 и 5.3.0; Однако у меня нет другой версии 5.2.x для тестирования: - (
Какую версию PHP вы используете? Или ваш тестовый пример более сложен, чем опубликованный вами пример?
Может быть, один отчет об ошибке на http://bugs.php.net/ может быть связано? Например, Ошибка № 40503:
json_encode сериализует некоторые структуры данных в формате JSON для отправки по сети. Следовательно, все содержимое будет иметь строковый тип. Так же, как когда вы получаете какой-либо параметр от $ _POST или $ _GET.
Если вам нужно выполнить числовые операции с отправленными значениями, просто сначала преобразуйте их в int (с помощью функции intval () в PHP или parseInt () в Javascript), а затем выполните операции.
Ну, PHP json_encode () возвращает строку.
Вы можете использовать parseFloat () или parseInt () в js-коде:
parseFloat('122.5'); // returns 122.5
parseInt('22'); // returns 22
parseInt('22.5'); // returns 22
Я столкнулся с той же проблемой (PHP-5.2.11/Windows). Я использую это обходное решение
$json = preg_replace( "/\"(\d+)\"/", '$1', $json );
которое заменяет все (неотрицательные, целые) числа, заключенные в кавычки, на само число (''42'' становится '42').
См. также этот комментарий в руководстве PHP.