Форум города Чаусы и Чаусского района

Здравствуйте, Гость ( Вход | Регистрация | Правила форума )



PHP

   
  > PHP    
Поиск в теме | Версия для печати
Ray
> 3 июня 2009 — 13:37
  [Id]
Модератор


Форумчанин

Покинул форум
Сообщений всего: 259
Дата рег-ции: Окт. 2006  
Откуда: Belarus,Chausy
Репутация: 11



Язык PHP - классный, быстроразвивающийся и просто обалденный язык.
Иногда в нем можно встретить такие вещи,которыми он может действительно удивить.

В одном из скриптов php встретил такую вот конструкцию:
CODE:
<?php if (....): ?>
<li>
.....
</li>


Сразу не въехал, начал искать соответствующее продолжение.
Я-то думал, что это часть конструкции вида
CODE:
if(a>b)?a:b;

смутило отсутствие "?" на месте ":".
Каково же было мое удивление, когда немного ниже я увидел это:
CODE:
<?php endif ?>

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

Alternative syntax for control structures
PHP offers an alternative syntax for some of its control structures;
namely, if, while, for, foreach, and switch. In each case, the basic
form of the alternate syntax is to change
the opening brace to a colon (Улыбка and the closing brace to endif;,
endwhile;, endfor;, endforeach;, or endswitch;, respectively.

CODE:
<?php if ($a == 5): ?>
A is equal to 5
<?php endif; ?>


Оказывается php позволяет заменять открывающую фигурную скобку на двоеточие,
а закрывающую на endif;,endwhile;,endfor;,endforeach и т.д.
Интересно только, для кого сделана эта возможность.. для тех кто перешел
на ПХП с бейсика? Остается только догадываться.
Вот такой вот он разносторонний PHP...

(Отредактировано автором: 3 июня 2009 — 13:39)

-----
We don't know the days that will change our lives... Stephen King. Dreamcatcher.

top
Конституция Республики Беларусь:
"Статья 34. Гражданам Республики Беларусь гарантируется право на получение, хранение и распространение полной, достоверной и своевременной информации о деятельности государственных органов, общественных объединений, о политической, экономической, культурной и международной жизни, состоянии окружающей среды..."

m00nk
> 3 июня 2009 — 23:42
  [Id]
Администратор


Ко-админ. Жестокий, но справедливый.

Покинул форум
Сообщений всего: 2884
Дата рег-ции: Янв. 2006  
Откуда: туташний я
Репутация: 32



 Цитата:
Интересно только, для кого сделана эта возможность.. для тех кто перешел на ПХП с бейсика?

Глупый ты Подмигивание

Изначально PHP разрабатывался как часть HTML, чтобы можно было на стороне сервера модифицировать содержимое страниц перед отправкой клиенту. И в связи с этим и были добавлены эти конструкции, чтобы не путаться когда внутри цикла/условия стоят три-четыре сотни сток HTML-кода. Улыбка

-----

...ла-ла-ла-ла-ла...
top
Ray
> 26 июня 2009 — 13:03
  [Id]
Модератор


Форумчанин

Покинул форум
Сообщений всего: 259
Дата рег-ции: Окт. 2006  
Откуда: Belarus,Chausy
Репутация: 11



Не получается сделать одну штуку..
Есть, например, строка, из которой я хочу достать двоеточие ":"
Делаю так:
CODE:
<?php
$string = "parent::__construct();Mage::log('Ok.Some words test);";

$aElements = preg_split("/[\s,;\'\".()(:)]+/", $string, -1, PREG_SPLIT_DELIM_CAPTURE);
foreach($aElements as $Elements)
{
echo $Elements."<br />";
}
?>


Из документации по PHP:
 Цитата:
PREG_SPLIT_DELIM_CAPTURE - В случае, если этот флаг указан, выражение, заключенное в круглые скобки в разделяющем шаблоне, также извлекается из заданной строки и возвращается функцией. Этот флаг был добавлен в PHP 4.0.5.

Почему нужное мне двоеточие не извлекается.. никак не могу понять.. Хм
Добавлено
Забыл точку экранировать. Экранировал. поковырял регулярку еще - блин, не знаю почему не работает.

(Отредактировано автором: 26 июня 2009 — 17:12)

-----
We don't know the days that will change our lives... Stephen King. Dreamcatcher.

top
xXx
> 26 июня 2009 — 13:29
  [Id]
Модератор


Коренной житель Форума

Покинул форум
Сообщений всего: 888
Дата рег-ции: Янв. 2006  
Репутация: 21



"/[\s,;\'\".()(:)]+/"

Тут вообще суп какой-то, от которого явно будет несварение. Круглые скобки являются спец. символами... Короче, непонятно, что нужно сделать.

-----
КотЭ ::result::
top
Ray
> 26 июня 2009 — 13:45
  [Id]
Модератор


Форумчанин

Покинул форум
Сообщений всего: 259
Дата рег-ции: Окт. 2006  
Откуда: Belarus,Chausy
Репутация: 11



 Цитата:
Круглые скобки являются спец. символами... Короче, непонятно, что нужно сделать.

Из доки:
 Цитата:
В случае, если этот флаг указан, выражение, заключенное в круглые скобки.......

Может я его не так применяю? Пробовал экранировать кавычками - не работает.

Вроде понятно объяснил, чего хочу сделать.
Вот эту вот строку,например:
CODE:
$string = "parent::__construct();Mage::log('Ok.Some words test);";

Разбить на подстроки и засунуть в массив.
При этом, чтобы двоеточие являлось и сплиттером и, в то же время, тоже запихивалось в массив.
Массив такой:
parent
:
:
__construct
Mage
:
:
и т.д.

(Отредактировано автором: 26 июня 2009 — 13:53)

-----
We don't know the days that will change our lives... Stephen King. Dreamcatcher.

top
Ray
> 26 июня 2009 — 17:29
  [Id]
Модератор


Форумчанин

Покинул форум
Сообщений всего: 259
Дата рег-ции: Окт. 2006  
Откуда: Belarus,Chausy
Репутация: 11



Я оказывается неправильно круглые скобки ставил Закатив глазки
Теперь достаются все сплиттеры.Но!
1) Я хочу доставать только двоеточия.
2) Почему достается только одно двоеточие.. квантификатор с двойкой после него стоит, а достается только одно двоеточие.

CODE:
$aElements = preg_split("/([:{2}\s,;\'\"\.()])+/", $string, -1, PREG_SPLIT_DELIM_CAPTURE);


-----
We don't know the days that will change our lives... Stephen King. Dreamcatcher.
top
xXx
> 26 июня 2009 — 18:02
  [Id]
Модератор


Коренной житель Форума

Покинул форум
Сообщений всего: 888
Дата рег-ции: Янв. 2006  
Репутация: 21



Классы символов (character classes) сравнивают каждый символ внутри квадратных скобок со строкой по отдельности, насколько я знаю. Т.е. это просто список символов.
Выходит, {2} интерпретируется как "искать { или 2 или }" и делать с ними что-то при нахождении.

Вот мои версии, пробуй!

CODE:
$aElements = preg_split("/[\s,;'\"\.]+|(\(\))|(:)/", $string, -1, PREG_SPLIT_DELIM_CAPTURE+PREG_SPLIT_NO_EMPTY);


CODE:
$aElements = preg_split("/[\s,;'\"\.]+|(\(\))|(:{2})/", $string, -1, PREG_SPLIT_DELIM_CAPTURE+PREG_SPLIT_NO_EMPTY);


CODE:
$aElements = preg_split("/[\s,;\'\"\.()]+|(:)/", $string, -1, PREG_SPLIT_DELIM_CAPTURE+PREG_SPLIT_NO_EMPTY);


Кстати, такой вот кусок кода выглядит очень странно

CODE:
[()]


Я даже и не знаю, как это понимает парсер Однако

-----
КотЭ Ура!
top
Ray
> 26 июня 2009 — 18:09
  [Id]
Модератор


Форумчанин

Покинул форум
Сообщений всего: 259
Дата рег-ции: Окт. 2006  
Откуда: Belarus,Chausy
Репутация: 11



xXx
Спасибо, заработало Улыбка
Только начал разбираться с регулярками.

 Цитата:
CODE:
[()]

Я даже и не знаю, как это понимает парсер

Oooops... экранировал Ниндзя
Блин и правда... парсер даж не ругнулся

(Отредактировано автором: 26 июня 2009 — 18:13)

-----
We don't know the days that will change our lives... Stephen King. Dreamcatcher.

top
m00nk
> 26 июня 2009 — 19:22
  [Id]
Администратор


Ко-админ. Жестокий, но справедливый.

Покинул форум
Сообщений всего: 2884
Дата рег-ции: Янв. 2006  
Откуда: туташний я
Репутация: 32



Так он и не должен ругаться - синтаксис же соблюден. А за бред, который ты ему под видом регулярок скормить пытаешься, он не отвечает Подмигивание

-----

...ла-ла-ла-ла-ла...
top
Чупукабра
> 20 июня 2011 — 21:05
  [Id]



Забанен

Покинул форум
Сообщений всего: 27
Дата рег-ции: Июнь 2011  
Репутация: 0
[+][+][+]


Кто-нибудь может объяснить, зачем нужна чёрточка в операторе "target="_blank"? Код работает и без этой чёрточки совершенно так же. Прочверено много раз.

(Отредактировано автором: 20 июня 2011 — 21:27)

top
« Программирование »
 
  |  Метки: 
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.


RSS 23.10.2017 - 23:25
[Script Execution time: 0.0425]     [ Gzipped ]