From 12e3fdff8dd1b00ca2a70711a104ea2a879f5816 Mon Sep 17 00:00:00 2001 From: mproshchuk Date: Wed, 9 Oct 2024 20:52:03 +0300 Subject: [PATCH] Partial sync with EN --- install/unix/apache2.xml | 2 +- install/windows/building.xml | 15 +- language/types/string.xml | 341 +++++++++++++++++++---------------- 3 files changed, 187 insertions(+), 171 deletions(-) diff --git a/install/unix/apache2.xml b/install/unix/apache2.xml index 47f65f3..02a6369 100644 --- a/install/unix/apache2.xml +++ b/install/unix/apache2.xml @@ -116,7 +116,7 @@ make install шлях буде відповідати розташуванню apxs, але якщо Apache встановлено по-іншому, то потрібно змінити шлях до apxs. Варто зауважити, що деякі дистрибутиви можуть перейменувати - apxs в apxs2. + apxs на apxs2. diff --git a/install/windows/building.xml b/install/windows/building.xml index 3887f62..09c2846 100644 --- a/install/windows/building.xml +++ b/install/windows/building.xml @@ -1,16 +1,11 @@ - + Збирання з початкового коду - - Цей розділ навчає, як компілювати PHP з початкових файлів на Windows, - використовуючи засоби Microsoft. Про компілювання PHP за допомогою cygwin - розповідається тут: . - - - Див. Wiki-документацію: - &url.wiki.windows.build.howto; - + + Див. покрокове керівництво + зі збирання, де описано збирання за допомогою Visual Studio. + + Рядок (string) @@ -113,8 +113,8 @@ echo 'Змінні $також $не_розкриваються'; Лапки - Якщо рядок (string) взято в лапки ("), то PHP інтерпретує - наступні екрановані послідовності у спеціальні символи: + Якщо рядок (string) взято в лапки ("), то + PHP інтерпретує наступні екрановані послідовності у спеціальні символи: @@ -204,7 +204,7 @@ echo 'Змінні $також $не_розкриваються'; Найважливішою особливістю рядків (string) в лапках є розкривання значень змінних. Детальніше: - Обробка рядків. + Інтерполяція рядків. @@ -589,12 +589,12 @@ FOOBAR; Синтаксис nowdoc стосується рядків в апострофах, як heredoc — рядків в - лапках, тобто працює схожим способом до heredoc, але без парсингу - тексту всередині. Така конструкція прекрасно підходить - для вставлення PHP-коду або великих частин тексту без необхідності їхнього - екранування. Цей синтаксис має деякі спільні риси з конструкцією SGML - <![CDATA[ ]]>, оскільки він оголошує блок тексту, - який не підлягає аналізу. + лапках, тобто працює схожим способом до heredoc, але без + інтерполяції тексту всередині. Така конструкція прекрасно + підходить для вставлення PHP-коду або великих частин тексту без необхідності + їхнього екранування. Цей синтаксис має деякі спільні риси з конструкцією + SGML <![CDATA[ ]]>, оскільки він оголошує блок + тексту, який не підлягає аналізу. @@ -682,37 +682,30 @@ EOT; - Обробка змінних + Інтерполяція рядка Якщо рядок (string) записано в лапках або в heredoc, то - змінні в ньому — обробляються. + в нього можна вставляти змінні. Є два способи запису: - простий та - складний. - Простий синтаксис є найпоширенішим і найзручнішим. Він надає можливість + основний та + розширений. + Основний синтаксис є найпоширенішим і найзручнішим. Він надає можливість вбудувати змінну, значення масиву (array), або властивість об'єкта (object) в рядок (string) з невеликими зусиллями. - - Складний синтаксис можна розпізнати за фігурними дужками, в які обрамлено - вираз. - - - Простий синтаксис - + Основний синтаксис - Якщо трапляється знак долара ($), синтаксичний - аналізатор "жадібно" бере якомога більше лексем для формування правильної - назви змінної. + Якщо трапляється знак долара ($), а після — символи, що + є допустимими у назві змінної, то така послідовність вважається, власне, + змінною, а в текст замість неї підставляється її рядкове значення. - ]]> @@ -734,43 +721,131 @@ echo "Він поклав в тарілку три {$фрукт}и."; - Similarly, an array index or an object property - can be parsed. With array indices, the closing square bracket - (]) marks the end of the index. The same rules apply to - object properties as to simple variables. + Формально, структура основного синтаксису підставлення змінних є такою: + + +Simple syntax example - +зміщення-або-властивість:: + зміщення-в-рядку + | властивість-в-рядку + +зміщення-в-рядкуg:: + [ назва ] + | [ назва-змінної ] + | [ цифровий-літерал ] + +властивість-в-рядку:: + -> назва + +назва-змінної:: + $ назва + +назва:: + [a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]* + +]]> + + + + + + Синтаксис ${ вираз } є застарілим, починаючи з PHP + 8.2.0, оскільки його можна інтерпретувати як + змінну змінної: + + "purple"); +const foo = 'bar'; +$foo = 'foo'; +$bar = 'bar'; +var_dump("${foo}"); +var_dump("${(foo)}"); +?> +]]> + + &example.outputs.82; + + + + &example.outputs; + + + + + В такому випадку використовується розширений + синтаксис інтерполяції рядка. + + + + + + If it is not possible to form a valid name the dollar sign remains + as verbatim in the string: + + + + +]]> + + &example.outputs; + + + + + -echo "He drank some $juices[0] juice.".PHP_EOL; -echo "He drank some $juices[1] juice.".PHP_EOL; -echo "He drank some $juices[koolaid1] juice.".PHP_EOL; + + Interpolating the value of the first dimension of an array or property + + "purple"); -class people { - public $john = "John Smith"; - public $jane = "Jane Smith"; - public $robert = "Robert Paulsen"; +echo "He drank some $juices[0] juice."; +echo PHP_EOL; +echo "He drank some $juices[1] juice."; +echo PHP_EOL; +echo "He drank some $juices[string_key] juice."; +echo PHP_EOL; - public $smith = "Smith"; +class A { + public $s = "string"; } -$people = new people(); +$o = new A(); -echo "$people->john drank some $juices[0] juice.".PHP_EOL; -echo "$people->john then said hello to $people->jane.".PHP_EOL; -echo "$people->john's wife greeted $people->robert.".PHP_EOL; -echo "$people->robert greeted the two $people->smiths."; // Won't work +echo "Object value: $o->s."; ?> ]]> @@ -780,14 +855,20 @@ echo "$people->robert greeted the two $people->smiths."; // Won't work He drank some apple juice. He drank some orange juice. He drank some purple juice. -John Smith drank some apple juice. -John Smith then said hello to Jane Smith. -John Smith's wife greeted Robert Paulsen. -Robert Paulsen greeted the two . +Object value: string. ]]> + + + The array key must be unquoted, and it is therefore not possible to + refer to a constant as a key with the basic syntax. Use the + advanced + syntax instead. + + + As of PHP 7.1.0 also negative numeric indices are supported. @@ -814,20 +895,23 @@ Changing the character at index -3 to o gives strong. - For anything more complex, you should use the complex syntax. + For anything more complex, the + advanced + syntax must be used. - - Complex (curly) syntax + + Advanced (curly) syntax - This isn't called complex because the syntax is complex, but because it - allows for the use of complex expressions. + The advanced syntax permits the interpolation of + variables with arbitrary accessors. - Any scalar variable, array element or object property with a + Any scalar variable, array element or object property + (static or not) with a string representation can be included via this syntax. The expression is written the same way as it would appear outside the string, and then wrapped in { and @@ -841,10 +925,18 @@ Changing the character at index -3 to o gives strong. 'Indexed value', + 'const-key' => 'Key with minus sign', + 'foo' => ['foo1', 'foo2', 'foo3'] +]; // Won't work, outputs: This is { fantastic} echo "This is { $great}"; @@ -852,8 +944,16 @@ echo "This is { $great}"; // Works, outputs: This is fantastic echo "This is {$great}"; +class Square { + public $width; + + public function __construct(int $width) { $this->width = $width; } +} + +$square = new Square(5); + // Works -echo "This square is {$square->width}00 centimeters broad."; +echo "This square is {$square->width}00 centimeters wide."; // Works, quoted keys only work using the curly brace syntax @@ -861,114 +961,35 @@ echo "This works: {$arr['key']}"; // Works -echo "This works: {$arr[4][3]}"; +echo "This works: {$arr[3][2]}"; -// This is wrong for the same reason as $foo[bar] is wrong outside a string. -// PHP first looks for a constant named foo, and throws an error if not found. -// If the constant is found, its value (and not 'foo' itself) would be used -// for the array index. -echo "This is wrong: {$arr[foo][3]}"; +echo "This works: {$arr[DATA_KEY]}"; -// Works. When using multi-dimensional arrays, always use braces around arrays +// When using multidimensional arrays, always use braces around arrays // when inside of strings -echo "This works: {$arr['foo'][3]}"; - -// Works. -echo "This works: " . $arr['foo'][3]; - -echo "This works too: {$obj->values[3]->name}"; +echo "This works: {$arr['foo'][2]}"; -echo "This is the value of the var named $name: {${$name}}"; +echo "This works: {$obj->values[3]->name}"; -echo "This is the value of the var named by the return value of getName(): {${getName()}}"; - -echo "This is the value of the var named by the return value of \$object->getName(): {${$object->getName()}}"; - -// Won't work, outputs: This is the return value of getName(): {getName()} -echo "This is the return value of getName(): {getName()}"; +echo "This works: {$obj->$staticProp}"; // Won't work, outputs: C:\folder\{fantastic}.txt -echo "C:\folder\{$great}.txt" +echo "C:\folder\{$great}.txt"; + // Works, outputs: C:\folder\fantastic.txt -echo "C:\\folder\\{$great}.txt" +echo "C:\\folder\\{$great}.txt"; ?> ]]> - - - It is also possible to access class properties using variables - within strings using this syntax. - - - - -$bar}\n"; -echo "{$foo->{$baz[1]}}\n"; -?> -]]> - - &example.outputs; - - - - - - - The value accessed from functions, method calls, static class variables, - and class constants inside - {$} will be interpreted as the name - of a variable in the scope in which the string is defined. Using - single curly braces ({}) will not work for - accessing the return values of functions or methods or the - values of class constants or static class variables. - + + As this syntax allows arbitrary expressions it is possible to use + variable variables + within the advanced syntax. + - - - - -]]> - - -