Новые книги

Перевод книги Adam Tepper «Bitcoin – The People's Money». Книга представляет собой отличное введение в биткойн «с нуля», но может оказаться полезной и тем, кто уже разбирается в теме.
The agile model of software development has taken the world by storm. Now, in Agile Software Development, Second Edition, one of agiles leading pioneers updates his Jolt Productivity award-winning book to reflect all that?s been learned about agile development since its original introduction.

Alistair Cockburn begins by updating his powerful model of software development as a ?cooperative game of invention and communication.? Among the new ideas he introduces: harnessing competition without damaging collaboration; learning lessons from lean manufacturing; and balancing strategies for communication. Cockburn also explains how the cooperative game is played in business and on engineering projects, not just software development

Next, he systematically illuminates the agile model, shows how it has evolved, and answers the questions developers and project managers ask most often, including

· Where does agile development fit in our organization?

· How do we blend agile ideas with other ideas?

· How do we extend agile ideas more broadly?

Cockburn takes on crucial misconceptions that cause agile projects to fail. For example, you?ll learn why encoding project management strategies into fixed processes can lead to ineffective strategy decisions and costly mistakes. You?ll also find a thoughtful discussion of the controversial relationship between agile methods and user experience design.

Cockburn turns to the practical challenges of constructing agile methodologies for your own teams. You?ll learn how to tune and continuously reinvent your methodologies, and how to manage incomplete communication. This edition contains important new contributions on these and other topics:

· Agile and CMMI

· Introducing agile from the top down

· Revisiting ?custom contracts?

· Creating change with ?stickers?

In addition, Cockburn updates his discussion of the Crystal methodologies, which utilize his ?cooperative game? as their central metaphor.

If you?re new to agile development, this book will help you succeed the first time out. If you?ve used agile methods before, Cockburn?s techniques will make you even more effective.

Строки

Учебник РНР
Назад Глава 6. Типы Вперёд

Строки

string это серия символов. В PHP символ это то же самое, что и байт, то есть имеется точно 256 различных возможных символов. Это также предполагает, что в PHP нет встроенной поддержки Unicode.

Примечание: строки могут быть очень большими. Практически нет ограничений на размер строк в PHP, поэтому нет никаких причин заботиться о длине строк.

Синтаксис

Строковой литерал может специфицироваться тремя способами.

Одинарные кавычки

Простейший способ специфицировать строку - заключить её в одинарные кавычки (символ ').

Для специфицирования литеральной одинарной кавычки вам нужно мнемонизировать/escape её с помощью backslash (\), как во многих других языках. Если backslash должен появиться перед одинарной кавычкой или в конце строки, нужно его удвоить. Обратите внимание, что если вы захотите мнемонизировать любой другой символ, backslash также будет напечатан! Поэтому обычно нет необходимости мнемонизировать сам backslash.

Примечание: в PHP 3 при этом будет выведено предупреждение уровня E_NOTICE.

Примечание: в отличие от двух других видов синтаксиса, переменные здесь не разворачиваются (не обсчитываются), когда находятся внутри строки, заключённой в одинарные кавычки.

echo 'Это простая строка.';
echo 'Вы можете также внедрять в строки символы newline,
как здесь.';
echo 'Arnold once said: "I\'ll be back"';
// на выходе: ... "I'll be back"
echo 'Are you sure you want to delete C:\\*.*?';
// на выходе: ... delete C:\*.*?
echo 'Are you sure you want to delete C:\*.*?';
// на выходе: ... delete C:\*.*?
echo 'I am trying to include at this point: \n a newline';
// на выходе: ... this point: \n a newline

Двойные кавычки

Если строка заключена в двойные кавычки ("), PHP понимает б́ольшее количество escape-последовательностей (мнемоник) специальных символов:

Таблица 6-1. Мнемоники символов
последовательностьзначение
\nlinefeed/прогон строки (LF или 0x0A (10) в ASCII)
\rcarriage return/возврат каретки (CR или 0x0D (13) в ASCII)
\thorizontal tab/горизонтальная табуляция (HT или 0x09 (9) в ASCII)
\\backslash/обратная наклонная черта
\$ знак dollar/доллар
\"double-quote/двойная кавычка
\[0-7]{1,3}последовательность символов, совпадающая с регулярным выражением, символ в 8-ричной нотации
\x[0-9A-Fa-f]{1,2} последовательность символов, совпадающая с регулярным выражением, символ в 16-ричной нотации

Ещё раз напоминает, что если вы захотите мнемнонизировать любой другой символ, backslash также будет напечатан!

Но самым важным свойством строки, заключённой в двойные кавычки, является то, что имена переменных разворачиваются. См. разбор строк.

Heredoc

Другой способ ограничения строки - использовать синтаксис heredoc ("<<<"). После <<< необходимо предоставить идентификатор, затем строку, а затем - тот же идентификатор как закрывающую кавычку.

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

Предупреждение!

Важно отметить, что строчка с закрывающим идентификатором не содержит больше никаких символов, за исключением, возможно, точки с запятой (;). Это означает, что идентификатор не может вводится с отступом и что не может быть никаких пробельных символов и знаков табуляции до и после точки с запятой.

Самое, возможно, неприятное, что в конце строки не может быть также и символа carriage return ( \r), только form feed, AKA newline (\n). Поскольку Microsoft Windows использует последовательность \r\n как терминатор строки, ваш heredoc может не сработать, если вы запишете ваш скрипт в редакторе под Windows. Однако большинство программ-редакторов дают возможность сохранять ваши файлы с терминатором строк UNIX.

Heredoc текст ведёт себя так же, как строка в двойных кавычках. Это значит, что вам не нужно мнемонизировать кавычки в heredocs, но можно продолжать использовать коды-мнемоники, перечисленные выше. Переменные разворачиваются, но с комплексными переменными в heredoc нужно работать так же внимательно, как и со строками.

Пример 6-2. Heredoc-пример строк в кавычках
<?php
$str = <<<EOD
Пример строки,
захватывающей несколько строчек,
с использованием синтаксиса heredoc.
EOD;

/* Более сложный пример, с переменными. */
class foo
{
    var $foo;
    var $bar;

    function foo()
    {
        $this->foo = 'Foo';
        $this->bar = array('Bar1', 'Bar2', 'Bar3');
    }
}

$foo = new foo();
$name = 'MyName';

echo <<<EOT
My name is "$name". I am printing some $foo->foo.
Now, I am printing some {$foo->bar[1]}.
This should print a capital 'A': \x41
EOT;
?>

Примечание: поддержка heredoc была введена в PHP 4.

Разбор переменных

Когда строка специфицируется двойными кавычками или heredoc, переменные внутри неё разбираются.

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

Сложный синтаксис был введён в PHP 4 и может распознаваться по фигурным скобкам {} вокруг выражения.

Простой синтаксис

Если обнаружен знак dollar ($), разборщик захватывает как можно больше лексем для образования правильного имени. Заключайте имя переменной в фигурные скобки, если вы хотите явным образом специфицировать конец имени.

$beer = 'Heineken';
echo "$beer's taste is great"; // не будет работать, "'" это неправильный
			      // символ для имён переменных (у меня работает - прим. пер.)
echo "He drunk some $beers"; // работает, 's' это правильный символ
			      // для имён переменных
echo "He drunk some ${beer}s"; // работает

Аналогично вы можете заставить разобрать индекс массива или свойство объекта. В индексах массивов закрывающая квадратная скобка (]) обозначает конец индекса. Для свойств объекта применяются те же правила, что и для простых переменных, хотя со свойствами объекта невозможен трюк, как с переменными.

$fruits = array( 'strawberry' => 'red' , 'banana' => 'yellow' );

// заметьте, что это работает по-другому вне закавыченной строки.
echo "A banana is $fruits[banana].";

echo "This square is $square->width meters broad.";

// не будет работать. Для решения см. сложный синтаксис.
echo "This square is $square->width00 centimeters broad.";

Для чего-либо более сложного вы должны использовать сложный синтаксис.

Сложный (фигурный) синтаксис

Он называется сложным не потому, что сложен, а потому что вы можете включать таким способом сложные выражения.

Фактически вы можете включать любое значение, которое находится в пространстве имён строки с этим синтаксисом. Вы просто записываете выражение тем же способом, что и вне строки, а затем окружаете его символами { и }. Поскольку вы не может заменить '{' мнемоникой, этот синтаксис будет распознаваться, только когда $ идёт непосредственно после {.
(Используйте "{\$" или "\{$" для получения литерала "{$").
Вот некоторые примеры для пояснения:

$great = 'fantastic';
echo "This is { $great}"; // не будет работать, выведет: This is { fantastic}
echo "This is {$great}";  // работает, выведет: This is fantastic
echo "Это квадрат шириной {$square->width}00 сантиметров."; 
echo "Это работает: {$arr[4][3]}";     

// Неверно по той причине,
// что $foo[bar] неверно вне строки.
echo "Это неправильно: {$arr[foo][3]}"; 

echo "Вы должны сделать это так: {$arr['foo'][3]}";
echo "Вы можете даже записать {$obj->values[3]->name}";
echo "Это значение переменной $name: {${$name}}";

Доступ к символу в строке

Можно получить доступ к символам в строке путём специфицирования смещения с базой 0 в фигурных скобках для нужного символа.

Примечание: для обеспечения обратной совместимости вы можете по-прежнему использовать скобки массива. Однако этот синтаксис не рекомендуется, начиная с PHP 4.

Пример 6-3. Некоторые примеры строк
<?php
/* Присвоение строкового значения. */
$str = "This is a string";

/* Присоединение к ней. */
$str = $str . " with some more text";

/* Другой способ присоединения с мнемоникой для newline. */
$str .= " and a newline at the end.\n";

/* Эта строка будет выглядеть '<p>Number: 9</p>' */
$num = 9;
$str = "<p>Number: $num</p>";

/* А эта - '<p>Number: $num</p>' */
$num = 9;
$str = '<p>Number: $num</p>';

/* Получить первый символ строки */
$str = 'This is a test.';
$first = $str{0};

/* Получить последний символ строки */
$str = 'This is still a test.';
$last = $str{strlen($str)-1};
?>

Используемые функции

Строки можно объединять (конкатенировать) с помощью операции '.' (точка). Заметьте, что операция сложения '+' здесь не работает. См. также раздел Строковые операции.

Имеется большое количество функций для работы со строками.

См. раздел строковых функций, функции регулярных выражений для продвинутого поиска & замены (в двух частях: Perl и POSIX расширенный).

Имеются также функции для работы с URL-строками и функции для кодирования/декодирования строк (mcrypt и mhash).

Наконец, если вы ещё не нашли то, что нужно, посмотрите функции для символьного типа.

Конвертация строк

Когда строка вычисляется как числовое значение, результирующее значение и его тип определяются так.

Строка вычисляется как float, если содержит любой из символов '.', 'e' или 'E'. Иначе она вычисляется как integer.

Значение даётся по начальной части строки. Если строка начинается с правильного числового значения, используется это значение. Иначе значение будет 0 (нуль). Верным числовым символом является знак с последующими одной или более цифрами (с возможной десятичной точкой), с последующей необязательной экспонентой. Экспонента это 'e' или 'E' с последующими одной или более цифрами.

$foo = 1 + "10.5";                // $foo это float (11.5)
$foo = 1 + "-1.3e3";              // $foo это float (-1299)
$foo = 1 + "bob-1.3e3";           // $foo это integer (1)
$foo = 1 + "bob3";                // $foo это integer (1)
$foo = 1 + "10 Small Pigs";       // $foo это integer (11)
$foo = 4 + "10.2 Little Piggies"; // $foo это float (14.2)
$foo = "10.0 pigs " + 1;          // $foo это float (11)
$foo = "10.0 pigs " + 1.0;        // $foo это float (11)

Дополнительно об этой конвертации см. учебник Unix, страницы о strtod(3).

Если вы хотите протестировать любой из примеров этого раздела, вы может скопировать его и вставить следующую строку, чтобы посмотреть, что будет:

echo "\$foo==$foo; type is " . gettype ($foo) . "<br />\n";

Назад Оглавление Вперёд
Числа с плавающей точкой Вверх Массивы