Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » синтаксическая структура

Ответить
Настройки темы
синтаксическая структура

Аватара для lcat

линуксоид


Сообщения: 189
Благодарности: 0

Профиль | Отправить PM | Цитировать


Здрасте всем.
Глядел код на php, и нашел вот такое кусочек
Код: Выделить весь код
        if (!$buf = trim($buf)) {
            continue;
        }
как понять это условие , что делает "!" в начале строки?

-------
slackware 13 www.slackware.com LPIC-1


Отправлено: 11:53, 17-12-2005

 
mar mar вне форума

Аватара для mar

just mar


Moderator


Сообщения: 3904
Благодарности: 163

Профиль | Отправить PM | Цитировать


! в начале строки - это "не" (отрицание), но конструкция, похоже все равно ошибочна, тк "=" - это опреатор присваивания $a = 5; обозначает, что переменной $a присвоили значения 5, в отличие от выражения "==" используемому при проверке (проверка равенства по значению), или "===" - (по значению и типу)

Отправлено: 13:14, 17-12-2005 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для lcat

линуксоид


Сообщения: 189
Благодарности: 0

Профиль | Отправить PM | Цитировать


mar
К сожелению не ошибочная
Вот весь код.
Код: Выделить весь код
#!/usr/local/bin/php -q
 <?php
 error_reporting(E_ALL);
 
 /* Allow the script to hang around waiting for connections. */
 set_time_limit(0);
 
 /* Turn on implicit output flushing so we see what we're getting
  * as it comes in. */
 ob_implicit_flush();
 
 $address = '192.168.1.53';
 $port = 10000;
 
 if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0) {
    echo "socket_create() failed: reason: " . socket_strerror($sock) . "\n";
 }
 
 if (($ret = socket_bind($sock, $address, $port)) < 0) {
    echo "socket_bind() failed: reason: " . socket_strerror($ret) . "\n";
 }
 
 if (($ret = socket_listen($sock, 5)) < 0) {
    echo "socket_listen() failed: reason: " . socket_strerror($ret) . "\n";
 }
 
 do {
    if (($msgsock = socket_accept($sock)) < 0) {
        echo "socket_accept() failed: reason: " . socket_strerror($msgsock) . "\n";
        break;
    }
    /* Send instructions. */
    $msg = "\nWelcome to the PHP Test Server. \n" .
        "To quit, type 'quit'. To shut down the server type 'shutdown'.\n";
    socket_write($msgsock, $msg, strlen($msg));
 
    do {
        if (false === ($buf = socket_read($msgsock, 2048, PHP_NORMAL_READ))) {
            echo "socket_read() failed: reason: " . socket_strerror($ret) . "\n";
            break 2;
        }
        if (!$buf = trim($buf)) {
            continue;
        }
        if ($buf == 'quit') {
            break;
        }
        if ($buf == 'shutdown') {
            socket_close($msgsock);
            break 2;
        }
        $talkback = "PHP: You said '$buf'.\n";
        socket_write($msgsock, $talkback, strlen($talkback));
        echo "$buf\n";
    } while (true);
    socket_close($msgsock);
 } while (true);
 
 socket_close($sock);
 ?>
Взято http://ua2.php.net/manual/ru/ref.sockets.php
Как бы перевести ее на русский чтоб понять чтож она делает

-------
slackware 13 www.slackware.com LPIC-1


Отправлено: 17:01, 17-12-2005 | #3

Underson


Сообщения: n/a

Профиль | Цитировать


if (!$buf = trim($buf)) {
continue;
}

можно понять так ... если не удалось присваивание... переходим на следующюю итерацию

Отправлено: 17:57, 17-12-2005 | #4


Аватара для E-mail

Ветеран


Сообщения: 640
Благодарности: 2

Профиль | Сайт | Отправить PM | Цитировать


если этим самым присвоением мы задаем переменную то сру

-------
Основы HTML | Конференции


Отправлено: 19:57, 17-12-2005 | #5


Аватара для vadimiron

Ветеран


Сообщения: 1864
Благодарности: 120

Профиль | Отправить PM | Цитировать


Цитата:
if (!$buf = trim($buf)) {
continue;
}
Я думаю это так: сначало надо понять что идёт в начале: присвоение( = ) или отрицание(!)
В мануале, в таблице приоритетов стоит, что ! производится раньше чем =, то есть получается происходит следущее:
сначало берётся отрицание от $buf и потом получившемуся значению присваевается новое значение, а именно trim($buf), что в общем то не имеет большого смысла
НО: в мануале внизу в сноске стоит
Цитата:
Although ! has a higher precedence than =, PHP will still allow expressions similar to the following: if (!$a = foo()), in which case the output from foo() is put into $a.
Значит !$buf = trim($buf)
надо скорей всего расценивать как !($buf = trim($buf)), то есть сначало обрубаем пустые места буффера с обоих сторон, и если буффер после этого обрубания остаётся нулевым (то есть ничего кроме пустоты там не было), то сервер пропускает данную итерацию и обрабатывает следущее сообщение в очереди

Отправлено: 20:13, 17-12-2005 | #6

Underson


Сообщения: n/a

Профиль | Цитировать


vadimiron исттину говоришь...

Отправлено: 15:39, 18-12-2005 | #7


Аватара для lcat

линуксоид


Сообщения: 189
Благодарности: 0

Профиль | Отправить PM | Цитировать


vadimiron
спасибо

-------
slackware 13 www.slackware.com LPIC-1


Отправлено: 15:45, 18-12-2005 | #8

mar mar вне форума

Аватара для mar

just mar


Moderator


Сообщения: 3904
Благодарности: 163

Профиль | Отправить PM | Цитировать


да, vadimiron прав. Так оно и есть. Причем я от греха подальше в таких случаях все-таки использую скобки. Еще одна детать - наличие или отсутствие чего-то по пустоте. Поскольку пустота бывает разная (а мануал, как показано выше изменчив ) имхо спокойней все-таки проверять пустую строку не !, а, скажем
PHP код: Выделить весь код

(strlen($str) < 1


Отправлено: 16:04, 18-12-2005 | #9


Аватара для vadimiron

Ветеран


Сообщения: 1864
Благодарности: 120

Профиль | Отправить PM | Цитировать


mar
Да они просто в одном if-е сделали две действия: 1) обрубание пустот и 2)проверка - типа круто (правда никому не понятно)
Мне так тоже не нравится, каждая команда должна одно действие выполнять
PHP код: Выделить весь код

$buf trim($buf);

if(
strlen($buf) < 1) continue; 

-------
Fortes fortuna adiuvat


Отправлено: 16:15, 18-12-2005 | #10



Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » синтаксическая структура

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
структура AD подразделений + GPO exo Microsoft Windows NT/2000/2003 18 07-10-2008 11:25
структура операционной системы clop1000 Хочу все знать 11 11-10-2007 16:52
Структура описывающая дробь в с++ farik Программирование и базы данных 4 03-02-2006 10:02
Структура трафика BanzayDima Хочу все знать 4 03-04-2005 20:54
структура бд в MySQL Dutchman Mihel Вебмастеру 10 09-09-2004 13:17




 
Переход