Как php
Перейти к содержимому

Как php

  • автор:

Как php

There are two string operators. The first is the concatenation operator (‘.’), which returns the concatenation of its right and left arguments. The second is the concatenating assignment operator (‘ .= ‘), which appends the argument on the right side to the argument on the left side. Please read Assignment Operators for more information.

$a = «Hello » ;
$b = $a . «World!» ; // now $b contains «Hello World!»

$a = «Hello » ;
$a .= «World!» ; // now $a contains «Hello World!»
?>

Смотрите также

User Contributed Notes 6 notes

10 years ago

As for me, curly braces serve good substitution for concatenation, and they are quicker to type and code looks cleaner. Remember to use double quotes (» «) as their content is parced by php, because in single quotes (‘ ‘) you’ll get litaral name of variable provided:

// This works:
echo «qwe < $a >rty» ; // qwe12345rty, using braces
echo «qwe» . $a . «rty» ; // qwe12345rty, concatenation used

// Does not work:
echo ‘qwerty’ ; // qwerty, single quotes are not parsed
echo «qwe $arty » ; // qwe, because $a became $arty, which is undefined

19 years ago

A word of caution — the dot operator has the same precedence as + and -, which can yield unexpected results.

echo «Result: » . $var + 3;
?>

The above will print out «3» instead of «Result: 6», since first the string «Result3» is created and this is then added to 3 yielding 3, non-empty non-numeric strings being converted to 0.

To print «Result: 6», use parantheses to alter precedence:

echo «Result: » . ($var + 3);
?>

17 years ago

» < $str1 >< $str2 > < $str3 >» ; // one concat = fast
$str1 . $str2 . $str3 ; // two concats = slow
?>
Use double quotes to concat more than two strings instead of multiple ‘.’ operators. PHP is forced to re-concatenate with every ‘.’ operator.

14 years ago

If you attempt to add numbers with a concatenation operator, your result will be the result of those numbers as strings.

echo «thr» . «ee» ; //prints the string «three»
echo «twe» . «lve» ; //prints the string «twelve»
echo 1 . 2 ; //prints the string «12»
echo 1.2 ; //prints the number 1.2
echo 1 + 2 ; //prints the number 3

1 year ago

Some bitwise operators (the and, or, xor and not operators: & | ^ ~ ) also work with strings too since PHP4, so you don’t have to loop through strings and do chr(ord($s[i])) like things.

See the documentation of the bitwise operators: https://www.php.net/operators.bitwise

15 years ago

Be careful so that you don’t type «.» instead of «;» at the end of a line.

It took me more than 30 minutes to debug a long script because of something like this:

The output is «axbc», because of the dot on the first line.

  • Операторы
    • Operator Precedence
    • Arithmetic Operators
    • Incrementing/Decrementing Operators
    • Assignment Operators
    • Bitwise Operators
    • Comparison Operators
    • Error Control Operators
    • Execution Operators
    • Logical Operators
    • String Operators
    • Array Operators
    • Type Operators
    • Copyright © 2001-2023 The PHP Group
    • My PHP.net
    • Contact
    • Other PHP.net sites
    • Privacy policy

    Как php

    The basic assignment operator is «=». Your first inclination might be to think of this as «equal to». Don’t. It really means that the left operand gets set to the value of the expression on the right (that is, «gets set to»).

    The value of an assignment expression is the value assigned. That is, the value of » $a = 3 » is 3. This allows you to do some tricky things:

    $a = ( $b = 4 ) + 5 ; // $a is equal to 9 now, and $b has been set to 4.

    In addition to the basic assignment operator, there are «combined operators» for all of the binary arithmetic, array union and string operators that allow you to use a value in an expression and then set its value to the result of that expression. For example:

    $a = 3 ;
    $a += 5 ; // sets $a to 8, as if we had said: $a = $a + 5;
    $b = «Hello » ;
    $b .= «There!» ; // sets $b to «Hello There!», just like $b = $b . «There!»;

    Note that the assignment copies the original variable to the new one (assignment by value), so changes to one will not affect the other. This may also have relevance if you need to copy something like a large array inside a tight loop.

    An exception to the usual assignment by value behaviour within PHP occurs with object s, which are assigned by reference. Objects may be explicitly copied via the clone keyword.

    Assignment by Reference

    Assignment by reference is also supported, using the » $var = &$othervar; » syntax. Assignment by reference means that both variables end up pointing at the same data, and nothing is copied anywhere.

    Пример #1 Assigning by reference

    $a = 3 ;
    $b = & $a ; // $b is a reference to $a

    print » $a \n» ; // prints 3
    print » $b \n» ; // prints 3

    $a = 4 ; // change $a

    print » $a \n» ; // prints 4
    print » $b \n» ; // prints 4 as well, since $b is a reference to $a, which has
    // been changed
    ?>

    The new operator returns a reference automatically, as such assigning the result of new by reference is an error.

    Результат выполнения данного примера:

    Parse error: syntax error, unexpected 'new' (T_NEW) in …

    More information on references and their potential uses can be found in the References Explained section of the manual.

    Arithmetic Assignment Operators

    Example Equivalent Operation
    $a += $b $a = $a + $b Addition
    $a -= $b $a = $a — $b Subtraction
    $a *= $b $a = $a * $b Multiplication
    $a /= $b $a = $a / $b Division
    $a %= $b $a = $a % $b Modulus
    $a **= $b $a = $a ** $b Exponentiation

    Bitwise Assignment Operators

    Example Equivalent Operation
    $a &= $b $a = $a & $b Bitwise And
    $a |= $b $a = $a | $b Bitwise Or
    $a ^= $b $a = $a ^ $b Bitwise Xor
    $a

    $a = $a

    Left Shift
    $a >>= $b $a = $a >> $b Right Shift

    Other Assignment Operators

    Example Equivalent Operation
    $a .= $b $a = $a . $b String Concatenation
    $a ??= $b $a = $a ?? $b Null Coalesce

    Смотрите также

    • arithmetic operators
    • bitwise operators
    • null coalescing operator

    User Contributed Notes 7 notes

    12 years ago

    Using $text .= «additional text»; instead of $text = $text .»additional text»; can seriously enhance performance due to memory allocation efficiency.

    I reduced execution time from 5 sec to .5 sec (10 times) by simply switching to the first pattern for a loop with 900 iterations over a string $text that reaches 800K by the end.

    8 years ago

    Be aware of assignments with conditionals. The assignment operator is stronger as ‘and’, ‘or’ and ‘xor’.

    $x = true and false ; //$x will be true
    $y = ( true and false ); //$y will be false
    ?>

    16 years ago

    bradlis7 at bradlis7 dot com’s description is a bit confusing. Here it is rephrased.

    echo $a , «\n» , $b ; ?>
    outputs

    Because the assignment operators are right-associative and evaluate to the result of the assignment
    $a .= $b .= «foo» ;
    ?>
    is equivalent to
    $a .= ( $b .= «foo» );
    ?>
    and therefore
    $b .= «foo» ;
    $a .= $b ;
    ?>

    5 months ago
    8 years ago

    PHP uses a temporary variable for combined assign-operators (unlike JavaScript), therefore the left-hand-side (target) gets evaluated last.

    Meaning:
    $a = ($b + $c) + $a;

    This can be important if the target gets modified inside the expression.

    $a = 0;
    $a += (++$a) + (++$a); // yields 5 (instead of 4)

    9 years ago

    Document says:
    «An exception to the usual assignment by value behaviour within PHP occurs with objects, which are assigned by reference in PHP 5. Objects may be explicitly copied via the clone keyword.»

    But it’s not very accurate! Considering this code:
    $a = new StdClass ;
    $b = $a ;

    $a = new StdClass ;

    var_dump ( $a , $b );
    ?>

    Output:
    object(stdClass)#2 (0) >
    object(stdClass)#1 (0) >
    Note: #2 and #1 means two different objects.

    But this code:
    $a = new StdClass ;
    $b = & $a ;

    $a = new StdClass ;

    var_dump ( $a , $b );
    ?>

    Output will be:

    object(stdClass)#2 (0) >
    object(stdClass)#2 (0) >

    Note: Still pointing to the same object.

    And this shows that that exception is not valid, PHP assignment for objects still makes a copy of variable and does not creates a real reference, albeit changing an object variable members will cause both copies to change.
    So, I would say assignment operator makes a copy of ‘Object reference’ not a real object reference.

    echo

    Выводит одно или несколько выражений без дополнительных символов новой строки или пробелов.

    На самом деле, echo — это не функция, а языковая конструкция. Её аргументы — это список выражений, следующих за ключевым словом echo , разделённых запятыми и не ограниченных круглыми скобками. В отличие от некоторых других языковых конструкций, echo не имеет никакого возвращаемого значения, поэтому её нельзя использовать в контексте выражения.

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

    У меня есть foo.

    Единственное отличие от print в том, что echo принимает несколько аргументов и не имеет возвращаемого значения.

    Список параметров

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

    Возвращаемые значения

    Функция не возвращает значения после выполнения.

    Примеры

    Пример #1 Примеры использования echo

    echo «echo не требует скобок.» ;

    // Строки можно передавать по отдельности как несколько аргументов или
    // объединять вместе и передавать как один аргумент.
    echo ‘Эта ‘ , ‘строка ‘ , ‘сформирована ‘ , ‘из ‘ , ‘нескольких параметров.’ , «\n» ;
    echo ‘Эта ‘ . ‘строка ‘ . ‘сформирована ‘ . ‘с ‘ . ‘помощью конкатенации.’ . «\n» ;

    // Новая строка или пробел не добавляются; пример ниже выведет «приветмир» в одну строку
    echo «привет» ;
    echo «мир» ;

    // То же, что и выше
    echo «привет» , «мир» ;

    echo «Эта строка занимает
    несколько строк. Новые строки также
    будут выведены» ;

    echo «Эта строка занимает\nнесколько строк. Новые строки также\nбудут выведены.» ;

    // Аргументом может быть любое выражение, производящее строку
    $foo = «пример» ;
    echo «пример — это $foo » ; // пример — это пример

    $fruits = [ «лимон» , «апельсин» , «банан» ];
    echo implode ( » и » , $fruits ); // лимон и апельсин и банан

    // Нестроковые выражения приводятся к строковым, даже если используется declare(strict_types=1)
    echo 6 * 7 ; // 42

    // Поскольку echo не работает как выражение, следующий код некорректен.
    ( $some_var ) ? echo ‘true’ : echo ‘false’ ;

    // Однако следующие примеры будут работать:
    ( $some_var ) ? print ‘true’ : print ‘false’ ; // print также является конструкцией, но
    // это допустимое выражение, возвращающее 1,
    // поэтому его можно использовать в этом контексте..

    echo $some_var ? ‘true’ : ‘false’ ; // сначала выполняется выражение, результат которого передаётся в echo
    ?>

    Примечания

    Замечание: Поскольку это языковая конструкция, а не функция, она не может вызываться при помощи переменных функций или именованных аргументов.

    Замечание: Использование с круглыми скобками

    Заключение одного аргумента в echo в круглые скобки не вызовет синтаксической ошибки и создаст синтаксис, который выглядит как обычный вызов функции. Однако это может ввести в заблуждение, потому что круглые скобки на самом деле являются частью выводимого выражения, а не частью самого синтаксиса echo .

    echo( «привет» );
    // также выведет «привет», потому что («привет») является корректным выражением

    echo( 1 + 2 ) * 3 ;
    // выведет «9»; круглые скобки приводят к тому, что сначала вычисляется 1+2, а затем 3*3
    // оператор echo видит всё выражение как один аргумент

    echo «привет» , » мир» ;
    // выведет «привет мир»

    echo( «привет» ), ( » мир» );
    // выведет «привет мир»; круглые скобки являются частью каждого выражения

    echo( «привет» , » мир» );
    // Выбросит ошибку синтаксического анализа, потому что («привет», «мир») не является корректным выражением.
    ?>

    Подсказка

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

    // Ниже выражение ‘Привет, ‘ . isset($name) вычисляется первым
    // и всегда имеет значение true, поэтому аргумент для echo всегда равен $name
    echo ‘Привет, ‘ . isset( $name ) ? $name : ‘Джон Доу’ . ‘!’ ;

    // Предполагаемое поведение требует дополнительных скобок
    echo ‘Привет, ‘ . (isset( $name ) ? $name : ‘Джон Доу’ ) . ‘!’ ;

    // В PHP до 8.0.0 ниже выведется «2», а не «Сумма: 3».
    echo ‘Сумма: ‘ . 1 + 2 ;

    // Опять же, добавление круглых скобок обеспечивает предполагаемый порядок выполнения.
    echo ‘Сумма: ‘ . ( 1 + 2 );

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

    echo «Привет, » , isset( $name ) ? $name : «Джон Доу» , «!» ;

    echo «Сумма: » , 1 + 2 ;

    Смотрите также

    • print — Выводит строку
    • printf() — Выводит отформатированную строку
    • flush() — Сброс системного буфера вывода
    • Способы работы со строками

    Как php

    Когда происходит отправка данных формы PHP-скрипту, информация из этой формы автоматически становится доступной ему. Существует несколько способов получения этой информации, например:

    Пример #1 Простая HTML-форма

     
    Имя:
    Email:

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

    Пример #2 Доступ к данным из простой HTML-формы, отправленной через POST

    echo $_POST [ ‘username’ ];
    echo $_REQUEST [ ‘username’ ];
    ?>

    GET-форма используется аналогично, за исключением того, что вместо POST, вам нужно будет использовать соответствующую предопределённую переменную GET. GET относится также к QUERY_STRING (информация в URL после ‘?’). Так, например, http://www.example.com/test.php?id=3 содержит GET-данные, доступные как $_GET[‘id’] . Смотрите также $_REQUEST .

    Замечание:

    Точки и пробелы в именах переменных преобразуется в знаки подчёркивания. Например, станет $_REQUEST[«a_b»] .

    PHP также понимает массивы в контексте переменных формы (смотрите соответствующие ЧАВО). К примеру, вы можете сгруппировать связанные переменные вместе или использовать эту возможность для получения значений списка множественного выбора select. Например, давайте отправим форму самой себе, а после отправки отобразим данные:

    Пример #3 Более сложные переменные формы

    if ( $_POST ) echo ‘

    ' ; 
    echo htmlspecialchars ( print_r ( $_POST , true ));
    echo '

    ‘ ;
    >
    ?>

    Имя:

    Email:

    Пиво:

    Замечание: Если внешнее имя переменной начинается с корректного синтаксиса массива, завершающие символы молча игнорируются. Например, станет $_REQUEST[‘foo’][‘bar’] .

    Имена переменных кнопки-изображения

    При отправке формы вместо стандартной кнопки можно использовать изображение с помощью тега такого вида:

    Когда пользователь щёлкнет где-нибудь на изображении, соответствующая форма будет передана на сервер с двумя дополнительными переменными — sub_x и sub_y . Они содержат координаты нажатия пользователя на изображение. Опытные программисты могут заметить, что на самом деле имена переменных, отправленных браузером, содержат точку, а не подчёркивание, но PHP автоматически преобразует точку в подчёркивание.

    HTTP Cookies

    PHP прозрачно поддерживает HTTP cookies как определено в » RFC 6265. Cookies — это механизм для хранения данных в удалённом браузере и, таким образом, отслеживания и идентификации вернувшихся пользователей. Вы можете установить cookies, используя функцию setcookie() . Cookies являются частью HTTP-заголовка, поэтому функция SetCookie должна вызываться до того, как браузеру будет отправлен какой бы то ни было вывод. Это то же ограничение, что и для функции header() . Данные, хранящиеся в cookie, доступны в соответствующих массивах данных cookie, таких как $_COOKIE и $_REQUEST . Подробности и примеры смотрите в справочной странице setcookie() .

    Замечание: Начиная с PHP 7.2.34, 7.3.23 и 7.4.11, соответственно, имена входящих cookie больше не декодируются из URL-закодированной строки из соображений безопасности.

    Если вы хотите присвоить множество значений одной переменной cookie, вы можете присвоить их как массив. Например:

    setcookie ( «MyCookie[foo]» , ‘Testing 1’ , time ()+ 3600 );
    setcookie ( «MyCookie[bar]» , ‘Testing 2’ , time ()+ 3600 );
    ?>

    Это создаст две разные cookie, хотя в вашем скрипте MyCookie будет теперь одним массивом. Если вы хотите установить именно одну cookie со множеством значений, сначала рассмотрите возможность использования к значениям такие функции, как serialize() или explode() .

    Обратите внимание, что cookie заменит предыдущую cookie с тем же именем в вашем браузере, если только путь или домен не отличаются. Так, для приложения корзины покупок вы, возможно, захотите сохранить счётчик. То есть:

    Пример #4 Пример использования setcookie()

    if (isset( $_COOKIE [ ‘count’ ])) $count = $_COOKIE [ ‘count’ ] + 1 ;
    > else $count = 1 ;
    >
    setcookie ( ‘count’ , $count , time ()+ 3600 );
    setcookie ( «Cart[ $count ]» , $item , time ()+ 3600 );
    ?>

    Точки в именах приходящих переменных

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

    $varname . ext ; /* неверное имя переменной */
    ?>

    В данном случае интерпретатор видит переменную $varname , после которой идёт оператор конкатенации, а затем голая строка (то есть, не заключённая в кавычки строка, не соответствующая ни одному из ключевых или зарезервированных слов) ‘ext’. Очевидно, что это не даст ожидаемого результата.

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

    Определение типов переменных

    Поскольку PHP определяет типы переменных и преобразует их (как правило) по мере необходимости, не всегда очевидно, какой тип имеет данная переменная в любой момент времени. PHP содержит несколько функций, позволяющих определить тип переменной, таких как: gettype() , is_array() , is_float() , is_int() , is_object() и is_string() . Смотрите также раздел Типы.

    HTTP является текстовым протоколом, и большинство, если не всё, содержимое, которое приходит в суперглобальные массивы, например, $_POST и $_GET , останется в виде строк. PHP не будет преобразовывать значения в определённый тип. В приведённом ниже примере $_GET[«var1»] будет содержать строку «null», а $_GET[«var2»] — строку «123».

    /index.php?var1=null&var2=123

    Список изменений

    Версия Описание
    7.2.34, 7.3.23, 7.4.11 имена входящих cookie больше не декодируются из URL-закодированной строки из соображений безопасности.

    User Contributed Notes 30 notes

    15 years ago

    The full list of field-name characters that PHP converts to _ (underscore) is the following (not just dot):
    chr(32) ( ) (space)
    chr(46) (.) (dot)
    chr(91) ([) (open square bracket)
    chr(128) — chr(159) (various)

    PHP irreversibly modifies field names containing these characters in an attempt to maintain compatibility with the deprecated register_globals feature.

    22 years ago

    Important: Pay attention to the following security concerns when handling user submitted data :

    18 years ago

    This post is with regards to handling forms that have more than one submit button.

    Suppose we have an HTML form with a submit button specified like this:

    Normally the ‘value’ attribute of the HTML ‘input’ tag (in this case «Delete») that creates the submit button can be accessed in PHP after post like this:

    $_POST [ ‘action_button’ ];
    ?>

    We of course use the ‘name’ of the button as an index into the $_POST array.

    This works fine, except when we want to pass more information with the click of this particular button.

    Imagine a scenario where you’re dealing with user management in some administrative interface. You are presented with a list of user names queried from a database and wish to add a «Delete» and «Modify» button next to each of the names in the list. Naturally the ‘value’ of our buttons in the HTML form that we want to display will be «Delete» and «Modify» since that’s what we want to appear on the buttons’ faceplates.

    Both buttons (Modify and Delete) will be named «action_button» since that’s what we want to index the $_POST array with. In other words, the ‘name’ of the buttons along cannot carry any uniquely identifying information if we want to process them systematically after submit. Since these buttons will exist for every user in the list, we need some further way to distinguish them, so that we know for which user one of the buttons has been pressed.

    Using arrays is the way to go. Assuming that we know the unique numerical identifier of each user, such as their primary key from the database, and we DON’T wish to protect that number from the public, we can make the ‘action_button’ into an array and use the user’s unique numerical identifier as a key in this array.

    Our HTML code to display the buttons will become:

    The 0000000002 is of course the unique numerical identifier for this particular user.

    Then when we handle this form in PHP we need to do the following to extract both the ‘value’ of the button («Delete» or «Modify») and the unique numerical identifier of the user we wish to affect (0000000002 in this case). The following will print either «Modify» or «Delete», as well as the unique number of the user:

    $submitted_array = array_keys ( $_POST [ ‘action_button’ ]);
    echo ( $_POST [ ‘action_button’ ][ $submitted_array [ 0 ]] . » » . $submitted_array [ 0 ]);
    ?>

    $submitted_array[0] carries the 0000000002.
    When we index that into the $_POST[‘action_button’], like we did above, we will extract the string that was used as ‘value’ in the HTML code ‘input’ tag that created this button.

    If we wish to protect the unique numerical identifier, we must use some other uniquely identifying attribute of each user. Possibly that attribute should be encrypted when output into the form for greater security.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *