Сейчас изучаю PHP по Самоучителю.
На столько тяжело для понимания примеры приводят просто ужас я в шоке уже голову сломал не могу понять как работает конструкция
Скрипт определяет права пользователя
в Книге описывают скрипт бредом каким то цытирую
(передаем значение перемменой
$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 программеры поразрядные операторы? |
Если бы ты сейчас это тему не завел, я бы так и не посмотрел как их (побитовые операторы) использовать
Спустя 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? Поправь и будет счастье!
Спустя 2 часа, 7 минут (1.05.2009 - 22:32) Han написал(а):
Да это я тут ошибся при написание вопроса. у меня там CREATE а выводит строчку "Пользователь может изменять записи" а "Пользователь может создавать записи" не выводит.
Плиз ответьте по делу.
Спустя 2 минуты, 35 секунд (1.05.2009 - 22:34) Han написал(а):
вот скрипт
PHP |
<?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>":"");
|
Почемуто выводит только строку "Пользователь может изменять записи "
Спустя 2 минуты, 11 секунд (1.05.2009 - 22:37) 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 минута, 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>'; |
ЗЫ. у меня:
Спустя 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 тут избыточно. Посмотри на результат (двумя постами выше):
Тоесть в первом случае результат больше нуля, а это значит что условие выполняется, во втором - ноль, значит условие не выполняется, итд.
Спустя 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 ) /* Так тоже можно написать. */
_____________
Никогда не бойся делать то, что ты пока не умеешь. Помни, Ковчег был построен любителем. Профессионалы построили "Титаник".