Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Что означает конструкция "|=" ? 
V
    Опции темы
Finder128
Дата 23.4.2009, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 15.3.2008

Репутация: нет
Всего: нет



Ковыряясь в исходном коде Joomla обнаружил интересную конструкцию.
Код

$failed = in_array( strtolower( $key ), $banned );
                // PHP Zend_Hash_Del_Key_Or_Index bug
                $failed |=is_numeric( $key );

В документации об этой операции ни полслова. Попытался разобраться с этим чудом, написал такой код:
Код

$failed= 11;
$failed |=12;
echo $failed;

Выдаёт 15. Немного изменил:
Код

$failed= 11;
$failed |=16;
echo $failed;

Выдаёт 27. Поменял failed на 20, выдал 31. 
Остаюсь в полном неведении. Что это за операция такая может быть?

Это сообщение отредактировал(а) Finder128 - 23.4.2009, 10:12
PM MAIL   Вверх
enof
Дата 23.4.2009, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 837
Регистрация: 23.1.2009
Где: Санкт-Петербург

Репутация: 30
Всего: 35



Побитовое или. Уставанвливает те биты, которые есть в обоих обоих операндах.
PM MAIL ICQ Skype   Вверх
Finder128
Дата 23.4.2009, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 15.3.2008

Репутация: нет
Всего: нет



Цитата(enof @ 23.4.2009,  10:12)
Побитовое или. Уставанвливает те биты, которые есть в обоих обоих операндах.

А практическое значение какое имеет? То бишь, в Joomla для чего такая штука присутствует?
PM MAIL   Вверх
enof
Дата 23.4.2009, 10:21 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 837
Регистрация: 23.1.2009
Где: Санкт-Петербург

Репутация: 30
Всего: 35



Смотрите:
in_array() возвращает булево значение, значит в failed будет 1 или 0.
is_numeric тоже возвращает 0 или 1.
1 | 0 = 1;
1 | 1 = 1;
0 | 1 = 1;
0 | 0 = 0;
Таким образом, $failed будет равна 0 только в том случае, если in_array() и is_numeric вернут false.

$failed |= 18 равно записи $failed = $failed | 18;
Ну дмаю это не секрет, что любой оператор можно так записать.
PM MAIL ICQ Skype   Вверх
bars80080
Дата 23.4.2009, 10:25 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



ну почему нет: http://www.php.ru/manual/language.operators.bitwise.html

$failed= 11;
$failed |=12;

то есть $failed = $failed | 12;
это значит выставление в результат побитово единиц, если единица либо там, либо там
приводим к двоичной форме: 
11 = 1011, 12 = 1100, выставляя единицы по правилу "или" получаем результат 1111 => 15, что тебе он и дал

Добавлено через 3 минуты и 4 секунды
мдя, опять форум перешёл в режим вялого
PM MAIL WWW   Вверх
Finder128
Дата 23.4.2009, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 15.3.2008

Репутация: нет
Всего: нет



Спасибо всем. На конкретном примере всё намного понятнее, чем в документации.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.5243 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.