Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.08.2012, 23:50   #1
alex4321
Пользователь
 
Регистрация: 23.07.2012
Сообщений: 77
По умолчанию При преобразовании строки в число оно обнуляется.

Есть XML-файл.
Из содержимого одного из элементов можно извлечь число - например, 10.
Извлечение с помощью str_replace.
Но при преобразовании (без разницы - intval, settype или (int)... ) оно содержит 0.
PHP код:
$t_min str_replace("</min>"""str_replace("<min>"""$str));
die(
$t_min); 
Выводит 10.
PHP код:
$t_min str_replace("</min>"""str_replace("<min>"""$str));
die(
intval($t_min)); 
Выводит пустую строку.
Почему?
alex4321 вне форума Ответить с цитированием
Старый 23.08.2012, 00:21   #2
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от alex4321 Посмотреть сообщение
Выводит пустую строку.
Почему?
die/exit:
Цитата:
void exit ([ string $status ] )
void exit ( int $status )

Если параметр status задан в виде строки, то эта функция выведет содержимое status перед выходом.

Если параметр status задан в виде целого числа (integer), то это значение будет использовано как статус выхода и не будет выведено. Статусы выхода должны быть в диапазоне от 0 до 254, статус выхода 255 зарезервирован PHP и не должен использоваться. Статус выхода 0 используется для успешного завершения программы.

Замечание: PHP >= 4.2.0 НЕ выведет параметр status если он задан как целое число (integer).
Andkorol вне форума Ответить с цитированием
Старый 23.08.2012, 01:51   #3
Lesha
Форумчанин
 
Аватар для Lesha
 
Регистрация: 30.01.2009
Сообщений: 418
По умолчанию

Цитата:
Есть XML-файл.
XML-файл в студию!
Lesha вне форума Ответить с цитированием
Старый 23.08.2012, 10:41   #4
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Lesha Посмотреть сообщение
XML-файл в студию!
Зачем..?
Andkorol вне форума Ответить с цитированием
Старый 23.08.2012, 18:50   #5
Lesha
Форумчанин
 
Аватар для Lesha
 
Регистрация: 30.01.2009
Сообщений: 418
По умолчанию

Код:
$t_min = str_replace("</min>", "", str_replace("<min>", "", $str));
die($t_min);
в слепую анализировать и выявить правильность подхода к "парсингу" XML без самого файла невозможно.
Lesha вне форума Ответить с цитированием
Старый 23.08.2012, 18:56   #6
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Вопрос ТС вообще не о парсинге – а о странном, на его взгляд, поведении die().
Andkorol вне форума Ответить с цитированием
Старый 23.08.2012, 19:43   #7
Lesha
Форумчанин
 
Аватар для Lesha
 
Регистрация: 30.01.2009
Сообщений: 418
По умолчанию

Цитата:
а о странном, на его взгляд, поведении die().
а как можно обсуждать это поведение, если нет исходного кода на конкретном примере?

Как узнать что передается в внутри переменной $t_min ???

ВОТ верный сабж

Код:
die((string) intval('1'));
какбы если вы знакомы с типизированными языками программирования то надо указывать явно тип.

Видимо die на входе ожидает стоку и преобразовать сама тип данных не в состоянии. Поэтому говорим интерпретатору о принудительном преобразовании типа данных.

Также можно об этом сообщить просто приклеив пустую строку к передаемому параметру.

Код:
die(intval('1') . '');

Последний раз редактировалось Lesha; 23.08.2012 в 19:51.
Lesha вне форума Ответить с цитированием
Старый 23.08.2012, 19:53   #8
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Lesha Посмотреть сообщение
Как узнать что передается в внутри переменной $t_min ???
Ну он же написал, что в переменной $t_min:
Цитата:
Сообщение от alex4321 Посмотреть сообщение
Из содержимого одного из элементов можно извлечь число - например, 10.
Извлечение с помощью str_replace.
Но при преобразовании (без разницы - intval, settype или (int)... ) оно содержит 0.
PHP код:
$t_min str_replace("</min>"""str_replace("<min>"""$str));
die(
$t_min); 
Выводит 10.
PHP код:
$t_min str_replace("</min>"""str_replace("<min>"""$str));
die(
intval($t_min)); 
Выводит пустую строку.
Почему?
Извлекаем из строки числовое значение (например, 10).
Если сразу используем его в die()выводит 10.
Если любым способом преобразуем в целое число, а потом используем в die()выводит пустую строку.
Всё ж написано – четко и понятно, нужно только внимательно прочитать.
Andkorol вне форума Ответить с цитированием
Старый 23.08.2012, 20:04   #9
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Lesha Посмотреть сообщение
Видимо die на входе ожидает стоку и преобразовать сама тип данных не в состоянии.
Причина такого поведения die() подробно описана выше, со ссылкой на мануал – ей не нужно ничего преобразовывать, строка и число в аргументах подразумевают различное поведение этой функции, вот и всё.
Andkorol вне форума Ответить с цитированием
Старый 23.08.2012, 20:08   #10
Lesha
Форумчанин
 
Аватар для Lesha
 
Регистрация: 30.01.2009
Сообщений: 418
По умолчанию

http://php.su/functions/?exit

внатуре

короче если надо чтобы die чтото вывел на экран нужно выполнить принудительную типизацию
Lesha вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Округление до .00 при неявном преобразовании alt5000 PHP 4 08.12.2011 16:04
дача:дано число n.Правдали оно содержит ровно 3 одинаковых цифры Dima170792 Помощь студентам 4 25.05.2011 20:19
Дано число a. Как определить, четное оно, или нечетное? pahanzona Общие вопросы Delphi 5 09.03.2011 12:49
2. Совершенным числом называется число, равное сумме всех делителей, меньших, чем оно само. Например, 28= Sos1 Помощь студентам 7 08.06.2010 01:08
Ввести число N и определить делится ли оно без остатка на число M (VBA) Ivanich Microsoft Office Excel 7 24.04.2008 19:43