Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Ошибка оператора switch или моя неграмотность?

Сообщения:  [1-10]   [11-12] 

 
 автор: Trianon   (04.01.2011 в 09:58)   письмо автору
 
   для: Tonik992   (04.01.2011 в 02:06)
 

> Trianon указывает на оскорбление разработчиков языка . Я ничего подобного не вижу.

Ну в общем-то да. Если создание разработчиками языка такого механизма, который нарушает мало мальски очевидные программисту принципы и подходы пользователя этого языка, расценивать как оскорбление пользователя, то да - указываю на оскорбление.

> Можно хоть что передать в параметр switch(). Да хоть объект. А тот, кто составляет код, должен быть сам внимательней в таких случаях.

Я очень внимательно проанализировал код, затем прогнал его через php в нескольких вариациях.

levsha аккуратно передает в switch скаляр. Скаляр, не массив, не объект. И в качестве меток сравнения case val: у него выступают скаляры, более того скаляры-константы. Куда уж проще задача - сравнить скалярную переменную с набором констант и сделать соответствующий выбор?

>Ну то, что тут switch((string)$name) помог - не сомневаюсь
ну так а без switch((string)$name) - как написать?
При условии, что определение $name Вам не принадлежит, а задано где-то извне?

между прочим, при глубоком рассмотрении мы наткнемся на еще одну неортогональность, которая вкупе с первой (сравнение int со string) и породила такой взрывоопасный коктейль:
в определении
$vars = array('0' => 'abc', 'one' => 'main', 'two' => 'default', 'three' => 'index', '1' => '4');
интерпретатор чихать хотел на апострофы вокруг нуля.
Он все равно сделает ключ числовым.
На каком основании он отказывает в праве символу 0 являться текстом в пользовательском контексте, непонятно совершенно.

  Ответить  
 
 автор: Tonik992   (04.01.2011 в 02:17)   письмо автору
 
   для: neadekvat   (04.01.2011 в 02:11)
 

Ну да, заслуживают. Только Trianon об этом не говорил...

  Ответить  
 
 автор: neadekvat   (04.01.2011 в 02:11)   письмо автору
 
   для: Tonik992   (04.01.2011 в 02:06)
 

Вообще-то, Trianon говорил о том, что разработчики языка заслуживают пару ласковых в свой адрес за то, что при сравнении с числом у них строка превращается в 0, и ('avc' == 0) дает true.

  Ответить  
 
 автор: Tonik992   (04.01.2011 в 02:06)   письмо автору
 
   для: neadekvat   (04.01.2011 в 01:54)
 

Trianon указывает на оскорбление разработчиков языка . Я ничего подобного не вижу. Можно хоть что передать в параметр switch(). Да хоть объект. А тот, кто составляет код, должен быть сам внимательней в таких случаях.
Ну то, что тут switch((string)$name) помог - не сомневаюсь

  Ответить  
 
 автор: neadekvat   (04.01.2011 в 01:54)   письмо автору
 
   для: Tonik992   (04.01.2011 в 01:51)
 

Конкретно под эту ситацию покажите свой код.

[поправлено модератором]

  Ответить  
 
 автор: Tonik992   (04.01.2011 в 01:51)   письмо автору
 
   для: neadekvat   (04.01.2011 в 01:29)
 

http://php.net/manual/en/control-structures.switch.php
тут

  Ответить  
 
 автор: neadekvat   (04.01.2011 в 01:29)   письмо автору
 
   для: Tonik992   (04.01.2011 в 01:28)
 

Ну, так покажите, как.

  Ответить  
 
 автор: Tonik992   (04.01.2011 в 01:28)   письмо автору
 
   для: Trianon   (02.01.2011 в 23:43)
 

Я такого никогда не видел...
можно обойтись и без (string)..

  Ответить  
 
 автор: levsha   (03.01.2011 в 07:31)   письмо автору
 
   для: Trianon   (02.01.2011 в 23:43)
 

Спасибо большое

  Ответить  
 
 автор: neadekvat   (02.01.2011 в 23:48)   письмо автору
 
   для: Trianon   (02.01.2011 в 23:43)
 

Угу,
echo 'some' == 0;
=> true - это реально "весело".

Автор, вот. Это так.. чтобы не удивляться.
Если конкретно:
> If you compare a number with a string or the comparison involves numerical strings, then each string is converted to a number and the comparison performed numerically. These rules also apply to the switch statement.

  Ответить  

Сообщения:  [1-10]   [11-12] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования