[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: поразрядные операторы
Han
Сейчас изучаю PHP по Самоучителю.
На столько тяжело для понимания примеры приводят просто ужас я в шоке уже голову сломал не могу понять как работает конструкция

Скрипт определяет права пользователя
PHP
<?php
define
(CREATE1);//Создание записи
define(DELETE2);//Удаление записи
define(ALTER4);//Изменение записи
define(ADMIN8);// Пользователь являеться администратором
$user_permission CREAT ALTER;
echo ((
$user_permission CREATE) ? "Пользователь может создавать записи <br>":"");
echo ((
$user_permission DELETE) ? "Пользователь может удалять записи <br>":"");
echo ((
$user_permission ALTER) ? "Пользователь может изменять записи <br>":"");
echo ((
$user_permission ADMIN) ? "Пользователь являеться администратором <br>":"");


в переменную $user_permission записываеться результат CREAT | ALTER тоесть число 5.
далье через оператор echo и с помощью оператора выбора прооизводиться печать либо строки либо пустой строки.

Интерпетировал скрипт в результате печатаеться строка "Пользователь может изменять записи"

голову ломаю не пойму как это работает если
PHP
$user_permission CREATE 0001 //соответственно 1

$user_permission DELETE 0000 //соответственно 0

$user_permission ALTER =  0100 //соответственно 4

в Книге описывают скрипт бредом каким то цытирую

(передаем значение перемменой $user_permission=5 таким образом мы определили что пользователь может создавать и изменять записи. После этого мы проверяем права пользователя путем соеденения переменной $user_permission с каждой константой посредством оператора &.Если флаг пользователя установлен на какое-либо из этих значений, то применение операции поразрядной коньюнкции даст ненулевое значение, и выведеться соответсвующяя строка. В противном случае результат будет ноль и ничего не выводиться )

Короче сам додумать не могу помогите плиз. И вообще программисты на PHP часто используют поразрядные операторы?



Спустя 10 минут, 44 секунды (1.05.2009 - 02:08) kirik написал(а):
Мне кажется в скрипте ошибка: ..CREAT | ALTER... Очевидно имелось ввиду не CREAT а CREATE.

Спустя 4 минуты, 20 секунд (1.05.2009 - 02:12) Han написал(а):
ДА правильнее записать
PHP
$user_permission CREATE ALTER;

Но всё же как скрипт работает не могу понять и часто ли используют PHP программеры поразрядные операторы?

Спустя 18 минут, 58 секунд (1.05.2009 - 02:31) kirik написал(а):
Цитата (Han @ 30.04.2009 - 18:12)
Но всё же как скрипт работает не могу понять

Я могу быть не прав, но как понял материал я:
PHP
CREATE   - 1 (десятичная) - 1 (двоичная)
DELETE   - 2 (десятичная) - 10 (двоичная)
ALTER    - 4 (десятичная) - 100 (двоичная)
ADMIN    - 8 (десятичная) - 1000 (двоичная)

Имеем CREATE | ALTER тоесть "5" в десятичной системе и "101" в двоичной.
101 состоит из 100 и 1. Следовательно оно будет удовлетворять условию с CREATE и ALTER.

Цитата (Han @ 30.04.2009 - 18:12)
часто ли используют PHP программеры поразрядные операторы?

Если бы ты сейчас это тему не завел, я бы так и не посмотрел как их (побитовые операторы) использовать smile.gif

Спустя 8 часов, 34 минуты, 8 секунд (1.05.2009 - 11:05) Han написал(а):
Имеем CREATE | ALTER тоесть "5" в десятичной системе и "101" в двоичной.
101 состоит из 100 и 1. Следовательно оно будет удовлетворять условию с CREATE и ALTER.

Ну для начала как у меня описано знак коньюнции не проверяет а просто как бы слаживает

Следовательно оно будет удовлетворять условию с CREATE и ALTER. только почему же на экран печатает только

"Пользователь может изменять записи" должно же печатать еще и "Пользователь может создавать записи"

Спустя 9 часов, 19 минут, 36 секунд (1.05.2009 - 20:25) kirik написал(а):
Цитата (Han @ 1.05.2009 - 03:05)
только почему же на экран печатает только

"Пользователь может изменять записи" должно же печатать еще и "Пользователь может создавать записи"

А ты поправил CREAT на CREATE? Поправь и будет счастье! smile.gif

Спустя 2 часа, 7 минут (1.05.2009 - 22:32) Han написал(а):
Да это я тут ошибся при написание вопроса. у меня там CREATE а выводит строчку "Пользователь может изменять записи" а "Пользователь может создавать записи" не выводит.

Плиз ответьте по делу.

Спустя 2 минуты, 35 секунд (1.05.2009 - 22:34) Han написал(а):
вот скрипт

PHP
<?php
define
(CREATE1);//Создание записи
define(DELETE2);//Удаление записи
define(ALTER4);//Изменение записи
define(ADMIN8);// Пользователь являеться администратором
$user_permission CREATE ALTER;
echo ((
$user_permission CREATE) ? "Пользователь может создавать записи <br>":"");
echo ((
$user_permission DELETE) ? "Пользователь может удалять записи <br>":"");
echo ((
$user_permission ALTER) ? "Пользователь может изменять записи <br>":"");
echo ((
$user_permission ADMIN) ? "Пользователь являеться администратором <br>":"");



Почемуто выводит только строку "Пользователь может изменять записи "

Спустя 2 минуты, 11 секунд (1.05.2009 - 22:37) kirik написал(а):
Да все он выводит!

Код:
PHP
define(CREATE1);//Создание записи
define(DELETE2);//Удаление записи
define(ALTER4);//Изменение записи
define(ADMIN8);// Пользователь являеться администратором
$user_permission CREATE ALTER;
echo ((
$user_permission CREATE) ? "Пользователь может создавать записи <br>":"");
echo ((
$user_permission DELETE) ? "Пользователь может удалять записи <br>":"");
echo ((
$user_permission ALTER) ? "Пользователь может изменять записи <br>":"");
echo ((
$user_permission ADMIN) ? "Пользователь являеться администратором <br>":"");


Выводит:
Цитата
Пользователь может создавать записи
Пользователь может изменять записи


Спустя 1 минута, 13 секунд (1.05.2009 - 22:38) kirik написал(а):
Цитата (Han @ 1.05.2009 - 14:34)
вот скрипт

Да, и скрипт который ты дал тоже нормально отрабатывается:
Цитата
Пользователь может создавать записи
Пользователь может изменять записи

Спустя 2 минуты, 19 секунд (1.05.2009 - 22:40) kirik написал(а):
А что у тебя этот код выведет?:
PHP
define(CREATE, 1);//Создание записи
define(DELETE, 2);//Удаление записи
define(ALTER, 4);//Изменение записи
define(ADMIN, 8);// Пользователь являеться администратором
$user_permission = CREATE | ALTER;
echo ($user_permission & CREATE).'<br>';
echo ($user_permission & DELETE).'<br>';
echo ($user_permission & ALTER).'<br>';
echo ($user_permission & ADMIN).'<br>';


ЗЫ. у меня:
Цитата
1
0
4
0

Спустя 14 минут, 37 секунд (1.05.2009 - 22:55) Han написал(а):
О да странно у меня тоже всё работает. Страно чес слово когда я создавал тему выводилость только 1 строка.

Всё работает но я в упор не могу понять как работают эти строки

echo (($user_permission & CREATE) ? "Пользователь может создавать записи <br>":"");
echo (($user_permission & DELETE) ? "Пользователь может удалять записи <br>":"");
echo (($user_permission & ALTER) ? "Пользователь может изменять записи <br>":"");
echo (($user_permission & ADMIN) ? "Пользователь являеться администратором <br>":"");

тут же нету операторов сравнение тоесть я имею в виду если бы была запись

echo (($user_permission & CREATE)==1 ? "Пользователь может создавать записи <br>":"");

то я бы понял а тут не пойму как по числам оно определяет что ему выводить либо строку либо пустую строку??

Спустя 4 минуты, 33 секунды (1.05.2009 - 22:59) Han написал(а):
А вообще не пойму нафига в самоучителе для новичка такие примеры ставить ппц какой то!

Спустя 1 минута, 19 секунд (1.05.2009 - 23:01) kirik написал(а):
Цитата (Han @ 1.05.2009 - 14:55)
echo (($user_permission & CREATE)==1 ? "Пользователь может создавать записи <br>":"");

то я бы понял а тут не пойму как по числам оно определяет что ему выводить либо строку либо пустую строку??

==1 тут избыточно. Посмотри на результат (двумя постами выше):
Цитата
1
0
4
0

Тоесть в первом случае результат больше нуля, а это значит что условие выполняется, во втором - ноль, значит условие не выполняется, итд.

Спустя 40 секунд (1.05.2009 - 23:01) kirik написал(а):
Цитата (Han @ 1.05.2009 - 14:59)
А вообще не пойму нафига в самоучителе для новичка такие примеры ставить ппц какой то!

Согласен что новичку это абсолютно не нужно. А что за самоучитель?

Спустя 5 минут, 16 секунд (1.05.2009 - 23:07) Han написал(а):
Да конешно эврика я допёр! Спасибо огромнейшее тебе. получаеться резултат 0 возрашяет false, а всё что выше 0 возращяет true я совсем забыл за это!
Дело в том что в книге этот пример почти не обьяснили типа сами думайте.

Самучитель PHP 5 второе издание. Максим Кузнецов, Игорь Симдянов.

Это ещё не всё я сейчас создам новую тему по новому скрипту тоже седня голову часа пол наверно ломал когда читал самучитель и не могу понять как он пашет. Написать здесь или всё таки новую тему создать?

Спустя 6 минут, 15 секунд (1.05.2009 - 23:13) ulcigor написал(а):
Да, совершенно верно, в любой логической конструкции, в которой проверяется любое значение как истина и 0 - как ложное, совершенно не обязательно ставить явную проверку. Т.е

bool flag = true;
if( flag== true ) /* Излишне, так как ifлогическая конструкция Хотя это и не ошибка */
if( flag ) /* Так тоже можно написать. */


Спустя 1 минута, 51 секунда (1.05.2009 - 23:15) Han написал(а):
Вопрос а зачем перед обьявлением флага писать bool ?

ведь можно просто обявить переменную
flag = true;

Спустя 1 минута, 3 секунды (1.05.2009 - 23:16) kirik написал(а):
Цитата (Han @ 1.05.2009 - 15:07)
Написать здесь или всё таки новую тему создать?

Лучше новую тему, если тематика отличается от этой.

Спустя 1 минута, 32 секунды (1.05.2009 - 23:17) Han написал(а):
Всём спасибо вы ответили на мой вопрос даже более чем!

Спустя 1 минута, 30 секунд (1.05.2009 - 23:19) ulcigor написал(а):
Да код на СИ тут не к месту :-)
$flag = true;
if( $flag== true ) /* Излишне, так как ifлогическая конструкция Хотя это и не ошибка */
if( $flag ) /* Так тоже можно написать. */


_____________
Никогда не бойся делать то, что ты пока не умеешь. Помни, Ковчег был построен любителем. Профессионалы построили "Титаник".
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.